使用动态规划的方式,但是难点是要考虑很多情况,比如0 00 001均为0
1010,202 均为1 0存在1且有能得到解码结果的情况是0的前面只能是1 2,比如506 907结果均为0
当有两个0相邻时结果为0 比如 1001 100111结果均为0
还有很多情况需要考虑,不断的完善吧
int numDecodings(std::string s) {
if(s.find_first_not_of('0')!=0)
return 0;
std::vector<int> d;
d.push_back(1);
d.push_back(1);
if(s[0]=='0')
s=s.substr(1);
std::string ss="";
for(int i=2;i<s.size()+1;i++){
ss="";
ss+=s[i-1-1];
ss+=s[i-1];
if(s[i-1]=='0') {
if(s[i-2]>'2')
return 0;
else if(s[i-2]=='0')
return 0;
if(i>=3) {
if(s[i-2]>'0'&&s[i-2]<='2'&&s[i-3]>'0'&&s[i-3]<='2')
d.push_back(d[i-2]);
else
d.push_back(d[i-1]);
}
else if (ss <= "26") {
d.push_back(d[i - 1]);
}
}
else {
if (s[i - 2] == '0') {
d.push_back(d[i - 1]);
} else {
if (ss <= "26") {
d.push_back(d[i - 1] + d[i - 2]);
} else
{
d.push_back(d[i - 1]);
}
}
}
}
return d[s.size()];
}