LeetCode 91. 解码方法(动态规划)
1. 题目
一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1
'B' -> 2
...
'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:
输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。示例 2:
输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/decode-ways
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 分类讨论,跟前面的一位能否组成有效的数字
- dp[i] 表示 以 i 位置结束的数字,有多少种可能的组合情况
class Solution {public:int numDecodings(string s) {int i, n = s.size();vector<int> dp(n,0);if(s[0]=='0') return 0;//首位不能是0if(n==1) return 1;dp[0] = 1;if(s[0]=='1'){if(s[1]=='0') dp[1]=1;else dp[1]=2;}else if(s[0]=='2'){if(s[1]>'0' && s[1]<='6') dp[1]=2;else dp[1]=1;}else{if(s[1]=='0') dp[1]=0;else dp[1]=1;}for(i = 2; i < n; ++i){if(dp[i-1]==0)return 0;//前面状态是0,不用在找了if(s[i-1]=='0')//前面是0,0跟i-2组成数字{if(s[i] != '0')dp[i] = dp[i-1];//只能自己组成一个数}else if(s[i-1]=='1'){if(s[i]=='0') dp[i]=dp[i-2];//当前是0,0跟i-1组成数字,取dp[i-2]else dp[i]= dp[i-1]+dp[i-2];//当前不是0,两种选择}else if(s[i-1]=='2'){if(s[i]>'0' && s[i]<='6') dp[i]= dp[i-1]+dp[i-2];else if(s[i]=='0') dp[i]=dp[i-2];else dp[i] = dp[i-1];}else//3-9{if(s[i]=='0') return 0;else dp[i]=dp[i-1];}}return dp[n-1];}
};
LeetCode 91. 解码方法(动态规划)相关推荐
- 125. Leetcode 91. 解码方法 (动态规划- 字符串系列)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示的是到i这个位置的字符串的解码方法 步骤二.推断状态方程: dp[i]的推导会取决于当前s[i]的字符情况以及前一位字符,具体如下: 如果当前 ...
- leetcode 91 解码方法 动态规划 递推
// 各种特殊情况处理 // 选择从右往左,从左往右也是一样class Solution { public:int numDecodings(string s) {int n = s.length() ...
- LeetCode 0091.解码方法 - 动态规划+原地滚动(比较高效的算法)
[LetMeFly]91.解码方法 - 动态规划+原地滚动(比较高效的算法) 力扣题目链接:https://leetcode.cn/problems/decode-ways/ 一条包含字母 A-Z 的 ...
- LeetCode 91.解码方法
LeetCode 91.解码方法 ways: s[i] = 0 : if(s[i-1] == 1 || s[i-1] == 2) :s[i]只能和前一位绑定在一起,此时dp[i] = dp[i-2]; ...
- leetcode: 91. 解码方法
91. 解码方法 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/decode-ways/ 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ...
- Java实现 LeetCode 91 解码方法
91. 解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 - 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总 ...
- leetcode - 91. 解码方法
一条包含字母 A-Z 的消息通过以下方式进行了编码: ′A′−>1'A' -> 1′A′−>1 ′B′−>2'B' -> 2′B′−>2 ......... ′Z′ ...
- LeetCode 91. 解码方法 Java/Python
一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1 ...
- Leetcode 91. 解码方法 (每日一题 20211013)
一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> 1 'B' -> 2 ... 'Z' -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映 ...
最新文章
- Microsoft R 和 Open Source R,哪一个才最适合你?
- SpringBoot数据缓存
- 每日一皮:一个悲伤的事实,元
- Virtual ListView效率对比
- 终于!《iOS 全埋点解决方案》正式出版
- Java Arrays.asList()方法详解
- IOS安装CocoaPods完整流程
- Saltstack_实战指南01_系统规划
- java高级语言特性,Java高级语言特性之注解
- 【AI视野·今日Robot 机器人论文速览 第九期】Thu, 17 Jun 2021
- HDU 1411--校庆神秘建筑(欧拉四面体体积计算)
- Xshell 连接腾讯云、阿里云centos服务器
- Linux桌面环境GNOME实用技巧
- mtk驱动sensor移植
- element手机验证格式_vue+element表单验证(身份证(校验),手机号码,导游证号码)...
- Selenium控制已打开的IE浏览器
- mysql中utf8和utf8mb4区别,MySQL中utf8和utf8mb4的区别
- cuda性能分析工具
- ExoPlayer修改播放器UI
- 使用ajax从服务器端获取数据
热门文章
- 机器学习中目标函数、损失函数以及正则项的通俗解释
- python 经典类和新式类
- php注入教程,php注入点构造代码实例详解
- android studio创建文件,如何在Android Studio中创建File Templates
- linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap
- viewpager 跳转到指定页面
- Python代码这样写更优雅(转)
- linux dd使用记录
- HDU 2444 The Accomodation of Students 二分图匹配