//类似斐波那契数列
//考虑多种情形,单个0,连续2个0,
//以及10+或20+的情况
//(类DP思路)
class Solution {
public:
int numDecodings(string s) {
int len=s.size();
if(s.empty()||s[0]=='0')
return 0;
if(len==1)return 1;
int first;int second;
if((s[0]=='1'&&s[1]=='0')||(s[0]>'2'&&s[1]!='0')||(s[0]=='2'&&(s[1]>'6'||s[1]=='0')))
{
first=1;second=1;
}
else if(s[1]=='0'&&(s[0]=='0'||s[0]>'2'))
return 0;
else
{first=1;second=2;}
for(int i=2;i<len;i++)
{
if(s[i]=='0'&&(s[i-1]=='0'||s[i-1]>'2'))
return 0;
else if(s[i]=='0'||s[i-1]=='0')
second=first;
else if(s[i]>'6'&&s[i-1]=='2')
first=second;
else if(s[i-1]>'2')
first=second;
else
{
int temp=first;
first=second;
second=temp+second;
}
}
return second;
}
};