• 解码方法


    解码方法

    题目:
    条包含字母 A-Z 的消息通过以下方式进行了编码:

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

    题目数据保证答案肯定是一个 32 位的整数。

    示例 1:

    输入:"12"
    输出:2
    解释:它可以解码为 "AB"(1 2)或者 "L"(12)。
    示例 2:

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

    输入:s = "0"
    输出:0
    示例 4:

    输入:s = "1"
    输出:1
    示例 5:

    输入:s = "2"
    输出:1

    解题思路:首先想最后一位字符可以怎么编码,可以单独作为一种编码,此时编码方式=倒数第二位的编码方式;如果最后一位编码和他前面一位编码合并为一个两位数,那么编码方式为倒数第三个字符的编码方式,所以最后一位的编码方式应该等于倒数第二位的编码方式+倒数第三位的编码方式以此类推

    class Solution {
        public int numDecodings(String s) {
            
            if(s.isEmpty())
                return 0;
            
            if(s.equals("0"))
                return 0;
            
            char ch[] = s.toCharArray();
            
            //数组定义:dp[i] 表示 前i个序列的编码方式
            int dp[] = new int[ch.length + 1];
            
            //初始化:dp[0]为 1 是为了后面的循环dp[2]可以得到正确结果
            dp[0] = 1;
            
            /**
            dp[i] = dp[i - 1]
            if(10 <= ch[i - 1] + ch[i - 2] <= 26) dp[i] += dp[i - 2]
            **/
            
            for(int i = 1; i <= ch.length; i++) {
                int a = ch[i - 1] - '0';
                //如果a == 0那么只能和前一位组成两位数
                if(a >= 1 && a <= 9) {
                    dp[i] = dp[i - 1];
                }
                
                if(i > 1) {
                    int b = 10 * (ch[i - 2] - '0') + ch[i - 1] - '0';
                    if(b <= 26 && b >= 10) {
                        dp[i] += dp[i - 2];
                    }
                }
            }
            
            return dp[ch.length];
        }
    }
    
  • 相关阅读:
    javascript 使用链式结构
    javascript 闭包
    javascript 使用canvas绘画
    (14)javascript 函数表达式 递归、闭包
    (13)javascript 面向对象 创建对象
    wpf和winform的区别
    XtraReport1添加参数
    {$DEFINE WANYI}
    $('#myModal').modal('show') //显示$('#myModal').modal('hide')隐藏
    计算机音视频技术
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/13963537.html
Copyright © 2020-2023  润新知