前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >91. 解码方法

91. 解码方法

作者头像
CaesarChang张旭
发布2021-06-24 10:38:46
4600
发布2021-06-24 10:38:46
举报
文章被收录于专栏:悟道

一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为: "AAJF" ,将消息分组为 (1 1 10 6) "KJF" ,将消息分组为 (11 10 6) 注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。 给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。 示例 1: 输入:s = "12" 输出:2 解释:它可以解码为 "AB"(1 2)或者 "L"(12)。 示例 2: 输入:s = "226" 输出:3 解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。 示例 3: 输入:s = "0" 输出:0

代码语言:javascript
复制
class Solution {
    public int numDecodings(String s) {
        int []dp=new int[s.length()];//保存当前位 的结果
        dp[0]=1;//第1位只有一种结果 
        if(s.charAt(0)=='0'){
            return 0;
        }

        //dp[i-1]->当前字符的映射方法    dp[i-2] 上一个字符的映射方法
        for(int i=1;i<s.length();i++){
            if(s.charAt(i)=='0'){
                //出现0,但0 前不是1 2

                if(s.charAt(i-1)!='1'&&s.charAt(i-1)!='2'){
                    return 0;
                }

                dp[i]=(i==1?dp[0]:dp[i-2]); //防止越界  要进行判断i是否=1           
            }
            else  if(s.charAt(i-1)=='1'||(s.charAt(i-1)=='2'&&s.charAt(i)<='6')){
                //出现 1XX或者 20->26    可以差分为两种结果 合并
                              
                    dp[i]=(i==1? dp[0]+1:dp[i-1]+dp[i-2]);    //防止越界  要进行判断i是否=1           
     
            }else{
                dp[i]=dp[i-1];//当前字符无效
            }
        }

        return dp[s.length()-1];

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档