Decode Ways:from LeetCode

来源:互联网 发布:java十大低级错误 编辑:程序博客网 时间:2024/05/21 11:22

题目大意:A-Z分别编码为1-26,给你一个数字串,问这个数字串有多少种解码方法?

如 12有两种1,2和12分别是AB 和 L

0开头的认为是非法的,因为无法解码,同样 1001也无法解码

这些特殊情况可以在代码中特殊处理,此题可以用简单的DP解决

比如串 s=121212;a[i]来表示第i个字节时能有多少解码方式

a[1]=1;a[2]=2;a[3]=a[1]+a[2];a[i]=a[i-2]+a[i-1]当且仅当s[i-1]s[i]组成的数字能解码且s[i]也能解码。其他情况同理分析,代码写的很直白

下面是AC代码

class Solution {public:    int numDecodings(string s) {        int a[10000];        int len=s.length(),num;        if(s[0]>'0' && s[0]<='9')        a[0]=a[1]=1;        else        return 0;        for(int i=2;i<=len;i++)        {            num=(s[i-2]-'0')*10+(s[i-1]-'0');            if(num==0)return 0;            if(num>26 && s[i-1]=='0')return 0;            a[i]=a[i-1];            if(num<27 && num>10 && s[i-1]!='0')                a[i]=a[i-1]+a[i-2];            if(num==10)                a[i]=a[i-2];        };        return a[len];    }};


0 0