decode-ways

【题目描述】A message containing letters fromA-Zis being encoded to numbers using the following mapping:
‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message"12", it could be decoded as"AB"(1 2) or"L"(12).
The number of ways decoding"12"is 2.
计算有多少种译码方式

【解题思路】判断当前判断当前值是否为0,不为0则f[i] = f[i] + f[i-1];
然后当前值和上一个字符能否组成26以下的输,能这与f[i] = f[i] + f[i-2]。

【考查内容】字符串,动态规划

class Solution {
public:
    int numDecodings(string s) {
        if(s.length()==0 || s[0] == '0')
            return 0;
        int len = s.length();
        vector<int> dp(len+1,0);
        dp[0]= 1,dp[1] = 1;
        for(int i=2;i<=len;i++){
            if(s[i-1]>='1' && s[i-1]<='9')
                dp[i] += dp[i-1];
            if(s[i-2]=='1' || (s[i-2]=='2' && s[i-1]>='0' && s[i-1]<='6'))
                dp[i] += dp[i-2];
        }
        return dp[len];
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_36909758/article/details/90765942
今日推荐