解题思路:
有三种种特殊情况
1. 10-19
2. 20-26
3. 如果是0,那么前面一位一定是0或1
用dp[i]表示长度为i的时候最大的可能数,1-9之间的数,dp[i]=dp[i-1],如果前面两位满足情况1或者2,dp[i]=dp[i-1]+dp[i-2]
class Solution {
public:
int numDecodings(string s) {
if(s.size()==0)return 0;
vector<int> dp(s.size()+1,0);
dp[0] = 1;
dp[1] = s[0] =='0' ? 0:1;
for(int i =2; i <=s.size(); i++){
if(s[i-1] >='1' && s[i-1] <='9')
dp[i]+=dp[i-1];
if(s[i-2]=='1' && s[i-1]>= '0'&& s[i-1] <='9' ||s[i-2] =='2' && s[i-1] >='0' && s[i-1] <='6')
dp[i]+=dp[i-2];
}
return dp[s.size()];
}
};