步骤一、确定状态:

确定dp数组及下标含义 dp[i]表示的是到i这个位置的字符串的解码方法

步骤二、推断状态方程:

dp[i]的推导会取决于当前s[i]的字符情况以及前一位字符,具体如下:

如果当前的s[i]=='0': 这说明自己无法单独解码,需要跟着前面一位进行解码,但是这 时候前面的一位必须是1或者2, 此时dp[i]=dp[i-2](下标为1处单独判断),否则此串无 法解码,返回0

如果前面的s[i-1]=='1': 这说明当前的s[i]可以自己解码,也可以和前面的一块解码,所 以解码方法是dp[i] = dp[i-1] + dp[i-2](下标为1处单独判断)

dp[i-1]表示自己解码,dp[i-2]表示和前面一块解码

如果前面的s[i-1]=='2'且当前的s[i]在1-6之间: 这时候s[i]同样可以单独解码,可以和 前面一块解码,动态方程和上面一样

除去上面这些特征情况,剩下的就是是s[i]单独解码的情况了,此时dp[i]=dp[i-1]

步骤三、规定初始条件:

初始条件:

全局初始化为0

步骤四、计算顺序: 从1开始正向遍历

class Solution:def numDecodings(self, s: str) -> int:if len(s) == 0 or s[0] == "0":return 0dp = [0 for i in range(len(s))]dp[0] = 1for i in range(1, len(s)):if s[i] == '0':if s[i-1] not in ['1','2']:return 0if i == 1:dp[i] = 1else:dp[i] = dp[i-2]elif s[i-1] == '1' or s[i-1] == '2' and s[i] in ['1','2','3','4','5','6']:if i == 1:dp[i] = 2else:dp[i] = dp[i-1] + dp[i-2]else:dp[i] = dp[i-1]return dp[-1]

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

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

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

  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. 一文读懂对抗机器学习Universal adversarial perturbations | CSDN博文精选
  2. WAIC开发者日倒计时两天,收藏好这份完整日程
  3. mysql pos点是什么,MySQL 5.6 主从报错一例
  4. mysql视图登录_mysql视图
  5. 软件过程与项目管理(作业一)
  6. Lesson 4.张量的线性代数运算
  7. swing 状态视图分离_Java Swing模型视图适配器介体
  8. 未捕获的异常 'NSInternalInconsistencyException'
  9. Vue过滤器_使用过滤器进行数据格式化操作---vue工作笔记0015
  10. Django发送邮件
  11. oracle 查询创建了哪些存储过程
  12. BZOJ4471 : 随机数生成器Ⅱ
  13. 系统学习NLP(三十二)--BERT、XLNet、RoBERTa、ALBERT及知识蒸馏
  14. ngrok 通过外网链接映射到本地机器,支持http,https
  15. 计算机组成与体系结构(软件设计师备考笔记)
  16. css阿拉伯数字,css 古文排版(含阿拉伯数字)
  17. 组合模式-完美处理树形递归结构
  18. 计算机网络的基本组成包括哪些,计算机网络的基本组成是什么?
  19. SAP中的client
  20. java实现仓储选址_邮局选址问题 (Java代码)并不难

热门文章

  1. 【技术短文】基于深度负相关学习的人群计数方法
  2. 判断一棵二叉树是否为AVL树
  3. 一款超级简单的瀑布流的制作
  4. c++中构造函数 、析构函数的作用域详解
  5. javascript 函数声明与函数表达式的区别
  6. IEEE802.11协议栈
  7. About mac80211
  8. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
  9. 《大话数据结构》读书笔记-线性表
  10. Linux 内核抓包功能实现基础(三) 抓包服务器的实现