1.动态规划,方程如下
2.注意几个特例
0
00
01
10
20
30
101
201
301
...
class Solution {
public:
int numDecodings(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len=s.length(),i;
vector<int> f(len+1,0);
if(len>0){
if(s[0]=='0')return 0;
f[1]=1;
}
if(len>1){
if(s[1]!='0'&&(s[0]=='1'||s[0]=='2'&&s[1]<='6'))
f[2]=2;
else
f[2]=1;
if(s[1]=='0'&&s[0]>'2'){
return 0;
}
}
for(i=2;i<len;++i){
if(s[i-1]=='1'){
f[i+1]+=f[i-1];
}else if(s[i-1]=='2'&&s[i]<='6'){
f[i+1]+=f[i-1];
}
if(s[i]!='0')f[i+1]+=f[i];
}
return f[len];
}
};