LeetCode decode-ways

题目描述

一条仅包含字母‘A’-‘Z’的消息用下列的方式加密成数字

'A' -> 1↵'B' -> 2↵...↵'Z' -> 26

现在给出加密成数字的密文,请判断有多少种解密的方法

例如:

给出的密文为“12”,可以解密为"AB"(1 2) 或者"L"(12).

所以密文"12"的解密方法是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); //初始化容器,大小为len+1, 内容为0
        dp[0] = 1;  // 当有0个字符时候的编码个数,当有连续两个字符能编码时f[i] = f[i-2],保证f[0]有值
        dp[1] = 1;  // 字符串长度为1时的编码个数
        for(int i = 2; i <= len; i++){
            if( s[i - 1] >= '1' && s[i - 1] <= '9')  //如果属于[1,9],那么这可以解释为一种编码
                dp[i] = dp[i - 1];    //那么dp[i]就等于dp[i-1],前i-1个有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];    //表明两个数字编码一个字母,dp[i]为之前记录的dp[i]+dp[i-2]
        }
        return dp[len];
    }
};
发布了169 篇原创文章 · 获赞 9 · 访问量 4827

猜你喜欢

转载自blog.csdn.net/weixin_41317766/article/details/101152785