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. 解码方法(动态规划)相关推荐

  1. 125. Leetcode 91. 解码方法 (动态规划- 字符串系列)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示的是到i这个位置的字符串的解码方法 步骤二.推断状态方程: dp[i]的推导会取决于当前s[i]的字符情况以及前一位字符,具体如下: 如果当前 ...

  2. leetcode 91 解码方法 动态规划 递推

    // 各种特殊情况处理 // 选择从右往左,从左往右也是一样class Solution { public:int numDecodings(string s) {int n = s.length() ...

  3. LeetCode 0091.解码方法 - 动态规划+原地滚动(比较高效的算法)

    [LetMeFly]91.解码方法 - 动态规划+原地滚动(比较高效的算法) 力扣题目链接:https://leetcode.cn/problems/decode-ways/ 一条包含字母 A-Z 的 ...

  4. LeetCode 91.解码方法

    LeetCode 91.解码方法 ways: s[i] = 0 : if(s[i-1] == 1 || s[i-1] == 2) :s[i]只能和前一位绑定在一起,此时dp[i] = dp[i-2]; ...

  5. leetcode: 91. 解码方法

    91. 解码方法 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/decode-ways/ 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : ...

  6. Java实现 LeetCode 91 解码方法

    91. 解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 - 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总 ...

  7. leetcode - 91. 解码方法

    一条包含字母 A-Z 的消息通过以下方式进行了编码: ′A′−>1'A' -> 1′A′−>1 ′B′−>2'B' -> 2′B′−>2 ......... ′Z′ ...

  8. LeetCode 91. 解码方法 Java/Python

    一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 1 ...

  9. Leetcode 91. 解码方法 (每日一题 20211013)

    一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> 1 'B' -> 2 ... 'Z' -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映 ...

最新文章

  1. Microsoft R 和 Open Source R,哪一个才最适合你?
  2. SpringBoot数据缓存
  3. 每日一皮:一个悲伤的事实,元
  4. Virtual ListView效率对比
  5. 终于!《iOS 全埋点解决方案》正式出版
  6. Java Arrays.asList()方法详解
  7. IOS安装CocoaPods完整流程
  8. Saltstack_实战指南01_系统规划
  9. java高级语言特性,Java高级语言特性之注解
  10. 【AI视野·今日Robot 机器人论文速览 第九期】Thu, 17 Jun 2021
  11. HDU 1411--校庆神秘建筑(欧拉四面体体积计算)
  12. Xshell 连接腾讯云、阿里云centos服务器
  13. Linux桌面环境GNOME实用技巧
  14. mtk驱动sensor移植
  15. element手机验证格式_vue+element表单验证(身份证(校验),手机号码,导游证号码)...
  16. Selenium控制已打开的IE浏览器
  17. mysql中utf8和utf8mb4区别,MySQL中utf8和utf8mb4的区别
  18. cuda性能分析工具
  19. ExoPlayer修改播放器UI
  20. 使用ajax从服务器端获取数据

热门文章

  1. 机器学习中目标函数、损失函数以及正则项的通俗解释
  2. python 经典类和新式类
  3. php注入教程,php注入点构造代码实例详解
  4. android studio创建文件,如何在Android Studio中创建File Templates
  5. linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能
  6. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap
  7. viewpager 跳转到指定页面
  8. Python代码这样写更优雅(转)
  9. linux dd使用记录
  10. HDU 2444 The Accomodation of Students 二分图匹配