题目来源:LeetCode_91
这题很明显可以分两种情况,一个一个解码和两个两个解码,采用双串dp
dp[i]为前i个字符串能有多少种解码方式:
1、一个一个解码
dp[i] = dp[i-1] (注意s(i)不能为0)
2、两个两个解码
dp[i] = dp[i-2] (注意s(i-1)不能为0 且两位数要小于等于26)
最后将两种可能性对应相加就能得到答案。
代码如下:
public int numDecodings(String s) {
int len = s.length();
char[] ch = s.toCharArray();
int[] dp = new int[len];
for(int i=1;i<len;i++){
if(ch[i-1]!='0'){
dp[i] += dp[i-1];
}
if(i>1 && ch[i-2]!='0' && (10*(ch[i-2]-'0')+(ch[i-1])-'0')<=26){
dp[i] += dp[i-2];
}
}
return dp[len];
}
这道题的边界条件要判断好,0的时候不能当十位!