// 各种特殊情况处理
// 选择从右往左,从左往右也是一样class Solution {
public:int numDecodings(string s) {int n = s.length();if (s[0] == '0') return 0;vector<int> dp(n);dp[n - 1] = 1;for (int i = n - 2; i >= 0; i--) {if ((s[i] == '0' || s[i] > '2') && s[i + 1] == '0') // 00或者30return 0;if (s[i] == '0' || s[i + 1] == '0') { // 当前为0或者后面为0只能一种解码dp[i] = dp[i + 1];continue;}if (s[i] > '1' && s[i + 1] > '6' || s[i] > '2'){ //27 或者 3X以上的情况dp[i] = dp[i + 1];continue;}if (i == n - 2)dp[i] = 2;else if (s[i + 2] == '0') // XX0的情况, 解码数量看后面dp[i] = dp[i + 1];elsedp[i] = dp[i + 1] + dp[i + 2];}return dp[0];}
};// 官方题解...就是简洁啊
// 直接将两个相邻字母变成数字映射,更加简单// 对于当前si有两种情况
// 单独解码 si 不是 0, 那么 si 种数加上 si-1的
// 组合解码 si 和 si - 1一起解码, 范围在26 并且
// si - 1 不是 '0'
class Solution {
public:int numDecodings(string s) {int n = s.length();vector<int> dp(n);dp[0] = 1;for (int i = 1; i <= n; i++) {if (s[i - 1] != '0')dp[i] += dp[i - 1];if (i > 1 && s[i - 2] != '0' && (s[i - 2] - '0') * 10 + s[i - 1] - '0' <= 26)dp[i] += dp[i - 2];}return dp[n];}};

leetcode 91 解码方法 动态规划 递推相关推荐

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

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

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

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

  3. LeetCode 91.解码方法

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

  4. leetcode: 91. 解码方法

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

  5. Java实现 LeetCode 91 解码方法

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

  6. LeetCode 91. 解码方法(动态规划)

    1. 题目 一条包含字母 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. matlab考试湖北理工学院,电子信息工程导论课程教学大纲-电气与电子信息工程学院-湖北.DOC...
  2. Android --- PagerAdapter的使用方法详细讲解
  3. python 函数结果缓存一段时间的装饰器
  4. 使用git-bash向码云提交项目
  5. 队列CircularFifoQueue:offer与add的区别
  6. 【渝粤题库】陕西师范大学210009幼儿园健康教育作业(高起专)
  7. 一个用于分布式DNN训练加速的通用通信调度器
  8. H264 STAP-A解包代码(测试通过)
  9. ubuntn安装qt5.12.10
  10. 神经网络和机器学习基础入门分享
  11. cpu测试用什么软件,cpu测试工具有哪些(免费分享这5款测试软件)
  12. Android本地音乐播放器
  13. 不良资产处置(二):不良资产处置存在问题及发展前景
  14. 三维实时云渲染平台解决方案
  15. Codeforces Round #614 (Div. 1) C.Xenon's Attack on the Gangs(树形dp)
  16. filco蓝牙不好用_FilcoMinilaAir蓝牙机械键盘使用感受,做工精细手感优良但并不完美...
  17. 关于文字音译的网页(基于百度AI)
  18. 计算机硬件专业叫什么作用,计算机硬件的五大功能是什么呢
  19. 用java求一个数的绝对值
  20. Windows下批处理if exist用法的注意事项

热门文章

  1. 闭包的定义,用处,和优缺点
  2. 自动驾驶规控课程学习——动作规划
  3. 基于http的在线版日期计算器+云笔记
  4. Java游戏-贪吃蛇
  5. android 28是什么手机型,一加6手机参数曝光 6.28英寸屏幕 搭载Android 8.1系统
  6. 腾讯“炒基”帝国崛起?
  7. 微信小程序音频(录制、播放、重录)功能
  8. Fresnal菲涅尔物体自发光
  9. flask上传文件至服务器,flask服务器文件上传云
  10. 集齐三大麒麟5G芯片,荣耀30系列自研技术大放异彩