解码方法
力扣 91. 解码方法
题目说明
一条包含字母
A-Z的消息通过以下映射进行了 编码 :1
2
3
4'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.length <= 100s只包含数字,并且可能包含前导零。
示例
例1
1 | 输入:s = "12" |
例2
1 | 输入:s = "226" |
例3
1 | 输入:s = "0" |
例4
1 | 输入:s = "06" |
笔者理解
此题是一道字符串算法问题,在力扣题库中被定义为中等题。
解法
当笔者阅读完此题后,发现此题就像是带约束条件版的青蛙跳台阶问题,也就是动态规划问题,在本题中只需要搞清楚字符串相邻字符的组合可能情况就好了,让我们来看看具体如何实现的吧。
实现
1 | public int numDecodings(String s) { |
时间和空间效率都还行,可见此解法还比较适合此题;
总结
本题是今天的每日一题,难度是为中等,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徐年の博客!






