class Solution { public int numDecodings(String s) { if(s.length()==0){ return 0; } int[] dp = new int[s.length()]; dp[0] = s.charAt(0)=='0'?0:1; if(s.length()==1){ return dp[0]; } int k = s.charAt(0) > '0' && s.charAt(1) > '0'? 1:0; dp[1] = k + (s.charAt(0) == '1' || s.charAt(0) == '2' && s.charAt(1) <= '6' ? 1:0); for (int i = 2; i < dp.length; i++) { if(s.charAt(i)!='0'){ dp[i] += dp[i-1]; } if(s.charAt(i-1)=='1'||s.charAt(i-1)=='2'&&s.charAt(i)<='6'){ dp[i] += dp[i-2]; } } return dp[s.length()-1]; }}
补充一个python的实现:
1 class Solution: 2 def numDecodings(self, s: str) -> int: 3 if not s: 4 return 0 5 dp = [0 for x in range(len(s) + 1)] 6 dp[0] = 1 7 dp[1] = 1 if 0 < int(s[0]) <= 9 else 0 8 9 for i in range(2, len(s) + 1):10 if 0 < int(s[i-1:i]) <= 9:11 dp[i] += dp[i - 1]12 if s[i-2:i][0] != '0' and int(s[i-2:i]) <= 26:13 dp[i] += dp[i - 2]14 return dp[len(s)]
参考: