解码方法

题目描述:一条包含字母 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. Java多线程专题4: 锁的实现基础 AQS

    合集目录 Java多线程专题4: 锁的实现基础 AQS 对 AQS(AbstractQueuedSynchronizer)的理解 Provides a framework for implementi ...

  2. jstl split 分割字符串?

    1. 在已经获得数据的前提下,对数据进行分割,分割后的结果是一个数组,可以通过数组获得我们需要的数据 2. value 是获得值 需要${} 的方式获取, var 是设置变量. var = " ...

  3. JAVA多线程学习八-多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  4. DNS解析域名过程

    DNS解析域名过程 使用域名转换成IP地址,先读取本地HOST文件,本地文件没有从当前电信网管获取对应IP. 本地host文件 C:\Windows\System32\drivers\etc 画图演示 ...

  5. Redis的配置文件redis.conf详解

    Redis的配置文件位于redis的安装目录下,一般不要直接操作出厂设置的配置文件,需要对其进行备份.# Redis的配置文件样例: # Redis configuration file exampl ...

  6. python unittest控制用例的执行顺序

    为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试.什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的 ...

  7. Java-基于JDK的动态代理

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11686615.html 简单的记录一下Java中自带动态代理的用法. 准备材料: 1.一个接口 ...

  8. 区段统计 mysql 语句 case when then end as

    EXPLAIN SELECT COUNT(*),CASEWHEN device_width > 729 THEN '>729'WHEN device_width BETWEEN '720' ...

  9. php函数(parse_str()

    parse_str()函数 把查询字符串解析到变量中 parse_str(string, array); string 规定要解析的字符串 array 存储变量的数组名称 例子: <?php p ...

  10. mac版mysql初次密码不知道或以后忘记密码重设密码步骤

    我自己装完MySQL 不知道怎么回事,初始密码就是登陆不了,幸好找到了这个,严格按照步骤就行了, 完全可以复制粘贴 这个是在百度贴吧看到的作者 贴吧id叁寸日光_1987 苹果->系统偏好设置- ...