您的位置:首页 > 其它

[LeedCode OJ]#91 Decode Ways

2015-08-24 13:48 351 查看
【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】



题目链接:https://leetcode.com/problems/decode-ways/

题意:
字母A~Z分别用数字1~26表示,现在给定一个数字串,问能够有几种字母表示方法

思路:
首先,dp[i]表示到底i位有几种表示方法
然后我们进行考虑
1.对于目前这位是1~9的情况
那么我们只考虑前一位的状况的时候为dp[i]+=dp[i-1]
而如果前两位在10~26的范围内,则还需要dp[i]+=dp[i-2]
2.对于这位是0的情况,而又不能与前一位组成10或者20
则dp[i]=0

class Solution
{
public:
    int numDecodings(string s)
    {
        int len = s.length();
        if(s == "0")
            return 0;
        vector<int> dp;
        dp.resize(len+1);
        int i,j,k;
        dp[0] = 0;
        if(s[0]>='1'&&s[0]<='9')
            dp[0] = 1;
        for(i = 1; i<len; i++)
        {
            if(s[i]=='0')
            {
                if(s[i-1]=='1'||s[i-1]=='2')
                {
                    if(i>1)
                        dp[i]+=dp[i-2];
                    else
                        dp[i] += 1;
                }
                continue;
            }
            dp[i]+=dp[i-1];
            if(s[i-1]=='1' || (s[i]<='6'&&s[i-1]=='2'))
            {
                if(i>1)
                    dp[i]+=dp[i-2];
                else
                    dp[i] += 1;
            }
        }
        return dp[len-1];
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: