91. Decode Ways 解码方法
来源:互联网 发布:手机防锁机软件 编辑:程序博客网 时间:2024/06/09 12:54
A message containing letters from A-Z is being encoded to numbers using the following mapping:
‘A’ -> 1
‘B’ -> 2
…
‘Z’ -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message “12”, it could be decoded as “AB” (1 2) or “L” (12).
The number of ways decoding “12” is 2.
这道题要求解码方法,跟之前那道 Climbing Stairs 爬梯子问题 非常的相似,但是还有一些其他的限制条件,比如说一位数时不能为0,两位数不能大于26,其十位上的数也不能为0,出去这些限制条件,根爬梯子基本没啥区别,也勉强算特殊的斐波那契数列,当然需要用动态规划Dynamci Programming来解。建立一位dp数组,长度比输入数组长多多2,全部初始化为1,因为斐波那契数列的前两项也为1,然后从第三个数开始更新,对应数组的第一个数。对每个数组首先判断其是否为0,若是将改为dp赋0,若不是,赋上一个dp值,此时相当如加上了dp[i - 1], 然后看数组前一位是否存在,如果存在且满足前一位不是0,且和当前为一起组成的两位数不大于26,则当前dp值加上dp[i - 2], 至此可以看出来跟斐波那契数组的递推式一样,代码如下:
class Solution {public: int numDecodings(string s) { if (s.empty() || (s.size() > 1 && s[0] == '0')) return 0; vector<int> dp(s.size() + 1, 0); dp[0] = 1; for (int i = 1; i < dp.size(); ++i) { dp[i] = (s[i - 1] == '0') ? 0 : dp[i - 1]; if (i > 1 && (s[i - 2] == '1' || (s[i - 2] == '2' && s[i - 1] <= '6'))) { dp[i] += dp[i - 2]; } } return dp.back(); }};
- 91. Decode Ways 解码方法
- LeetCode 91. Decode Ways(解码方法)
- LeetCode 91. Decode Ways(解码方法)
- 解码方法数 Decode Ways
- lintcode decode-ways 解码方法
- leetCode 91.Decode Ways (解码方式) 解题思路和方法
- 91. Decode Ways(解码方式)
- 512.Decode Ways-解码方法(中等题)
- 【Leetcode】Decode Ways 解码方式
- Leetcode 91. Decode Ways&&639.Decode ways
- Decode Ways(如何解码) 【leetcode】
- Decode Ways 不同的解码可能性
- LeetCode--Decode Ways(解码方式)Python
- [Leetcode] 91. Decode Ways
- LeetCode --- 91. Decode Ways
- [LeetCode]91.Decode Ways
- [leetcode] 91.Decode Ways
- 91. Decode Ways
- 微信公号“架构师之路”学习笔记(三)-MQ消息可达性_幂等性_延时性架构设计(应用场景、可靠投递、流量冲击)
- 34岁!100天!学会Java编程(Day12)——知识点串连
- android实现选中变大变小效果及边框效果的方式
- MySQL存储过程遍历游标用loop嵌套循环的例子
- Linux 内存与I/O访问
- 91. Decode Ways 解码方法
- NodeJS如何发送HTTPS请求
- [备忘录]-Ubuntu下安装JDK的几种方式
- 解决 id_rsa 权限不够
- Redis命令的请求和执行过程
- 机器学习理论与实战(十一)关联规则分析Apriori .
- pandas的应用
- Python
- QT之qss教程-QLineEdit