class Solution {
public:
int numDecodings(string s) {
int n=s.size();
if(n==0)
return 0;
vector<int> dp(n,0);
if(s[0]=='0')
return 0;
if(s[0]!='0')
dp[0]=1;
if(s[1]!='0')
dp[1]=1;
if((s[0]-'0')*10+(s[1]-'0')<=26&&(s[0]-'0')*10+(s[1]-'0')>=1)
dp[1]+=1;
for(int i=2;i<n;i++)
{
if(s[i]!='0')
dp[i]=dp[i-1];
if((s[i-1]-'0')*10+(s[i]-'0')<=26&&(s[i-1]-'0')*10+(s[i]-'0')>=1&&s[i-1]!='0')
//00 01 ..09不应该考虑,10应该考虑为1情况,11..19应该考虑为两种情况。dp[i]=dp[i-1]+dp[i-2];
dp[i]+=dp[i-2];
}
return dp[n-1];
}
};
public:
int numDecodings(string s) {
int n=s.size();
if(n==0)
return 0;
vector<int> dp(n,0);
if(s[0]=='0')
return 0;
if(s[0]!='0')
dp[0]=1;
if(s[1]!='0')
dp[1]=1;
if((s[0]-'0')*10+(s[1]-'0')<=26&&(s[0]-'0')*10+(s[1]-'0')>=1)
dp[1]+=1;
for(int i=2;i<n;i++)
{
if(s[i]!='0')
dp[i]=dp[i-1];
if((s[i-1]-'0')*10+(s[i]-'0')<=26&&(s[i-1]-'0')*10+(s[i]-'0')>=1&&s[i-1]!='0')
//00 01 ..09不应该考虑,10应该考虑为1情况,11..19应该考虑为两种情况。dp[i]=dp[i-1]+dp[i-2];
dp[i]+=dp[i-2];
}
return dp[n-1];
}
};