这道题有点像70. Climbing Stairs,类似斐波那契数列,但是它的状态
比较多。
class Solution {
public:
int numDecodings(string s)
{
int n=s.size();
if(n==0||s[0]=='0')//第一个数为0直接排除
return 0;
int *decode=new int[n];
decode[0]=1;
decode[1]=1;
for(int i=2;i<=n;i++)
{
if(s[i-1]=='0'&&(s[i-2]=='1'||s[i-2]=='2'))//当前数为0时,如果前一个数为1或者2,那么当前状态就等于向前两个的状态
decode[i]=decode[i-2];
else if(s[i-1]=='0'&&(s[i-2]=='0'||s[i-2]>'2'))//当前数为0时,过前一个数为0或者大于2,不能解码直接跳出
return 0;
else if(s[i-2]=='0')//如果前一位为0,那么和前3位的状态相同
decode[i]=decode[i-3];
else if(s[i-2]>'2'||s[i-2]=='2'&&s[i-1]>'6')//如果当前两位大于26,那么当前状态和前一位相同
decode[i]=decode[i-1];
else
decode[i]=decode[i-1]+decode[i-2];
}
return decode[n];
}
};