动态规划
class Solution {
public int numDecodings(String s) {
//动规
int n = s.length();
int[] f = new int[n];
f[0] = s.charAt(0) == '0' ? 0 : 1;
for(int i = 1;i < n;i++){
if(s.charAt(i) == '0'){
if(s.charAt(i-1) == '1' || s.charAt(i-1) == '2'){
f[i] = f[i-1];
if(i > 1)
f[i] = f[i-2];//s[i]=0则必须和s[i-1]捆绑在一起,这就导致s[i-1]无法与s[i-2]合在一起
}
else
return 0;
}
else if((s.charAt(i-1) - '0')*10 + s.charAt(i) - '0' <= 26 && s.charAt(i-1) != '0'){
if(i == 1){
f[i] = f[i-1] + 1;
continue;
}
f[i] = f[i-1] + f[i-2];//s[i]可以单独编码,也可与s[i-1]一起编码,这就可以分出2类
}
else
f[i] = f[i-1];
}
return f[n-1];
}
}