LeetCode-091-解码方法
解码方法
题目描述:一条包含字母 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/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:递归 穷举
- 首先,当s为null或者是空字符串或者s是以0开头的字符串,不可能映射成功,直接返回0。
- 如果s的长度为1,直接返回1。
- 然后是递归处理当s的长度大于1的情况,递归方法处理逻辑如下(方法的入参left和right分别为当前要匹配的字符的开始和结束位置
0 < (right - left) < 3):
- 如果left位置的数字为0即要匹配的字符是以0开头,则无法映射,直接返回;
- 如果left和right所匹配的字符数大于26,无法映射,返回;
- 如果right为s的最后一位,则result加1,返回;
- 如果right为s的倒数第二位,且最后一位不是0,则result加1,返回;
- 后面则根据right后的位数继续递归处理
right ~ right + 1和right ~ 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-解码方法的更多相关文章
- leetcode 91. 解码方法 JAVA
题目: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. ...
- leetcode 91. 解码方法
题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数 ...
- Leetcode 639.解码方法2
解码方法2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以包含字符 ' ...
- 【LeetCode】解码方法
[问题] 一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2…'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 : 输 ...
- Java实现 LeetCode 639解码方法 2(递推)
639. 解码方法 2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以 ...
- Java实现 LeetCode 91 解码方法
91. 解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 - 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总 ...
- 微软面试题: LeetCode 91. 解码方法 出现次数:3
题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 ...
- [LeetCode] Decode Ways 解码方法
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- [LeetCode] Decode Ways II 解码方法之二
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理)
Leetcode 91. Decode Ways 解码方法(动态规划,字符串处理) 题目描述 一条报文包含字母A-Z,使用下面的字母-数字映射进行解码 'A' -> 1 'B' -> 2 ...
随机推荐
- 利用JGrapht对有向无环图进行广度优先遍历
环境需求:JDK:1.8 jar:jgrapht-core-1.01.jar package edu; import org.jgrapht.experimental.dag.DirectedAcyc ...
- Lesson8——Pandas reindex重置索引
pandas目录 1 简介 重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行.列标签与 DataFrame 中的数据逐一匹配.通过重置索引操作,您可以完成对现 ...
- 【SimuPy】Python实现的Simulink 文档翻译全部完毕
作者:CycleUser 前情回顾: 前些天在和@iGuo.@白小鱼以及@12334在关于如何看待哈工大.哈工程受美商务部「实体名单」影响,被禁止使用 MATLAB 商业软件?的问题中讨论到了 sim ...
- JspSmartUpload 简略使用
JspSmartUpload 简略中文API文档 链接:https://blog.csdn.net/weixin_43670802/article/details/105143830 PDF课件 链接 ...
- feiQ发送信息
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import j ...
- java创建一个子类对象是会调用父类的构造方法会不会创建父类
1.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了Java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Obj ...
- 使用rsync+inotify实现/www目录实时同步
一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...
- Elasticsearch按请求体基本查询
1 分页: localhost:9200/get-together/_search {"query": {"match_all": {}},"from ...
- 模块random+os+sys+json+subprocess
模块random+os+sys+json+subprocess 1. random 模块 (产生一个随机值) import random 1 # 随机小数 2 print(random.rando ...
- Solution -「多校联训」签到题
\(\mathcal{Description}\) Link. 给定二分图 \(G=(X\cup Y,E)\),求对于边的一个染色 \(f:E\rightarrow\{1,2,\dots,c\ ...