91. Decode Ways

来源:互联网 发布:微表情心理学软件 编辑:程序博客网 时间:2024/06/05 21:13

这道题有点像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];    }};
0 0
原创粉丝点击