zoukankan      html  css  js  c++  java
  • 【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,其有两种编码方式:

    • 由一个数字编码而来,即最后一个数字s[i-1]不为零即可,从而需要加上前i-2的解码数量,即dp[i] += dp[i-1]

    • 由两个数字编码而来, 即最后一个数字s[i-2]和s[i-1]构成的两位数字在1~26之间,从而要加上前i-3个数字的解码数量,即dp[i] +=dp[i-2]

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

    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()];
        }
    };
  • 相关阅读:
    最近的几个坑
    最近对Allegro的几个总结
    sub drawing
    Allegro的几点小结
    产品量产的几个问题
    电源板问题的定位
    PCB学习
    servlet(6) 链接数据库
    servlet(5) HttpSession
    servlet(4)异常处理
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11658389.html
Copyright © 2011-2022 走看看