LeetCode刷题记105
91. 解码方法
class Solution {
public int numDecodings(String s) {
if (s.length() == 0) return 0;
List<Character> chs = new ArrayList<Character>();
if (s.charAt(0) == '0') {
return 0;
}
int[] dp = new int[s.length()];
dp[0] = 1;
for (int i = 1; i < s.length(); i ++) {
int num1 = s.charAt(i) - '0';
int num2 = (s.charAt(i - 1) - '0') * 10 + num1;
if (num1 != 0) {
dp[i] = dp[i - 1];
if (num2 >= 10 && num2 < 27) {
if (i >= 2) {
dp[i] += dp[i - 2];
} else {
dp[i] = dp[i - 1] + 1;
}
}
} else {
if (num2 >= 10 && num2 < 27) {
if (i >= 2) dp[i] = dp[i - 2];
else dp[i] = 1;
}
}
System.out.println("i " + i + " dp "+ dp[i]) ;
}
return dp[s.length() - 1];
}
}
// 1 12 3
// 1 1 2 3
// 11 2 3
// 1 1 23
// 11 23
2/5
105/150