解码方法

题目描述:一条包含字母 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 位 的整数。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/decode-ways/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:递归 穷举
  • 首先,当snull或者是空字符串或者s是以0开头的字符串,不可能映射成功,直接返回0
  • 如果s的长度为1,直接返回1。
  • 然后是递归处理当s的长度大于1的情况,递归方法处理逻辑如下(方法的入参leftright分别为当前要匹配的字符的开始和结束位置0 < (right - left) < 3):
    • 如果left位置的数字为0即要匹配的字符是以0开头,则无法映射,直接返回;
    • 如果leftright所匹配的字符数大于26,无法映射,返回;
    • 如果rights的最后一位,则result加1,返回;
    • 如果rights的倒数第二位,且最后一位不是0,则result加1,返回;
    • 后面则根据right后的位数继续递归处理right ~ right + 1right ~ right + 2的情况。
  • 最后返回result即为解码方法的总数。
public class LeetCode_091 {

    private static int result = 0;

    /**
* 递归 穷举:性能较差,提交会超时
*
* @param s
* @return
*/
public static int numDecodings(String s) {
// 这些情况无法映射,直接返回0
if (s == null || s == "" || s.equals("0") || s.startsWith("0")) {
return 0;
} if (s.length() == 1) {
return 1;
} numDecodings(s, 0, 1);
numDecodings(s, 0, 2);
return result;
} public static void numDecodings(String s, int left, int right) {
if (s.charAt(left) == '0') {
return;
}
if (Integer.valueOf(s.substring(left, right)) > 26) {
return;
}
if (s.length() - right == 0) {
result++;
return;
}
if (s.length() - right == 1 && s.charAt(s.length() - 1) != '0') {
result++;
return;
}
numDecodings(s, right, right + 1);
if (s.length() - right > 1) {
numDecodings(s, right, right + 2);
}
} public static void main(String[] args) {
System.out.println(numDecodings("226"));
}
}

【每日寄语】 与天奋斗,其乐无穷!与地奋斗,其乐无穷!与人奋斗,其乐无穷!

LeetCode-091-解码方法的更多相关文章

  1. leetcode 91. 解码方法 JAVA

    题目: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. ...

  2. leetcode 91. 解码方法

    题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数 ...

  3. Leetcode 639.解码方法2

    解码方法2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以包含字符 ' ...

  4. 【LeetCode】解码方法

    [问题] 一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2…'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 : 输 ...

  5. Java实现 LeetCode 639解码方法 2(递推)

    639. 解码方法 2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以 ...

  6. Java实现 LeetCode 91 解码方法

    91. 解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 - 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总 ...

  7. 微软面试题: LeetCode 91. 解码方法 出现次数:3

    题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 ...

  8. [LeetCode] Decode Ways 解码方法

    A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...

  9. [LeetCode] Decode Ways II 解码方法之二

    A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...

  10. Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)

    Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ...

随机推荐

  1. 利用JGrapht对有向无环图进行广度优先遍历

    环境需求:JDK:1.8 jar:jgrapht-core-1.01.jar package edu; import org.jgrapht.experimental.dag.DirectedAcyc ...

  2. Lesson8——Pandas reindex重置索引

    pandas目录 1 简介 重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行.列标签与 DataFrame 中的数据逐一匹配.通过重置索引操作,您可以完成对现 ...

  3. 【SimuPy】Python实现的Simulink 文档翻译全部完毕

    作者:CycleUser 前情回顾: 前些天在和@iGuo.@白小鱼以及@12334在关于如何看待哈工大.哈工程受美商务部「实体名单」影响,被禁止使用 MATLAB 商业软件?的问题中讨论到了 sim ...

  4. JspSmartUpload 简略使用

    JspSmartUpload 简略中文API文档 链接:https://blog.csdn.net/weixin_43670802/article/details/105143830 PDF课件 链接 ...

  5. feiQ发送信息

    import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import j ...

  6. java创建一个子类对象是会调用父类的构造方法会不会创建父类

    1.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Obj ...

  7. 使用rsync+inotify实现/www目录实时同步

    一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...

  8. Elasticsearch按请求体基本查询

    1 分页: localhost:9200/get-together/_search {"query": {"match_all": {}},"from ...

  9. 模块random+os+sys+json+subprocess

    模块random+os+sys+json+subprocess 1. random 模块   (产生一个随机值) import random 1 # 随机小数 2 print(random.rando ...

  10. Solution -「多校联训」签到题

    \(\mathcal{Description}\)   Link.   给定二分图 \(G=(X\cup Y,E)\),求对于边的一个染色 \(f:E\rightarrow\{1,2,\dots,c\ ...