其他分享
首页 > 其他分享> > 【LeetCode】解码方法

【LeetCode】解码方法

作者:互联网

【问题】

一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1
'B' -> 2

'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:
输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:
输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

【思路】

假设dp[i]表示前i-1个数字所解码的字符串数量,因此对于i来说,且dp长度为s.length()+1,其有两种编码方式:

我们只需要判断这两个条件,如果成立了,就加上相应的结果即可!

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

标签:26,数字,示例,解码,数字编码,方法,LeetCode,dp
来源: https://www.cnblogs.com/zhudingtop/p/11658389.html