Decode Ways
public class Solution {
/**
* @param s: a string, encoded message
* @return: an integer, the number of ways decoding
*/
public int numDecodings(String s) {
if (s == null || s.length() == 0) return 0;
int n = s.length();
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = s.charAt(0) == '0' ? 0 : 1; //0为非法字符
for (int i = 1; i < n; i++) { //i是index in s
//求 dp[i+1] → 前i个数字能组成的答案
if (s.charAt(i) != '0') {
dp[i + 1] += dp[i];
}
int twoDigit = (s.charAt(i - 1) - '0') * 10 + (s.charAt(i) - '0');
if (twoDigit >= 10 && twoDigit <= 26) {
dp[i + 1] += dp[i - 1];
}
}
return dp[n];
}
}
最后更新于
这有帮助吗?