栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode-100题(Hot) 91. 解码方法 [Java实现]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-100题(Hot) 91. 解码方法 [Java实现]

一条包含字母 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 ,请计算并返回 解码 方法的 总数 。

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

示例 1:

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


解法一:动态规划

本体实质上就是有限制的 f(x) = f(x-1) + f(x-2)

我们可以对 当前位置 i 及其 上一位置 i-1 分别计算字符串中字符的对应数字值,若满足 当前位置值   ,则 dp[i] += dp[i-1];若前位结合当前位的值 ,则 dp[i] += dp[i-2]。对应状态转移方程如下:

 实现如下:

    public int numDecodings(String s) {
        int length = s.length();
        String ss = " " + s;
        char[] chars = ss.toCharArray();
        int[] dp = new int[length+1];
        dp[0] = 1;
        for (int i = 1; i <= length; ++ i) {
            int a = chars[i]-'0', b = 10 * (chars[i-1]-'0') + x;
            if (1 <= a && a <= 9) dp[i] += dp[i-1];
            if (10 <= b && b <= 26) dp[i] += dp[i-2];
        }
        return dp[length];
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号