125. Leetcode 91. 解码方法 (动态规划- 字符串系列)
步骤一、确定状态:
确定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. 解码方法 (动态规划- 字符串系列)相关推荐
- 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. 解码方法(动态规划)
1. 题目 一条包含字母 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 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映 ...
最新文章
- 一文读懂对抗机器学习Universal adversarial perturbations | CSDN博文精选
- WAIC开发者日倒计时两天,收藏好这份完整日程
- mysql pos点是什么,MySQL 5.6 主从报错一例
- mysql视图登录_mysql视图
- 软件过程与项目管理(作业一)
- Lesson 4.张量的线性代数运算
- swing 状态视图分离_Java Swing模型视图适配器介体
- 未捕获的异常 'NSInternalInconsistencyException'
- Vue过滤器_使用过滤器进行数据格式化操作---vue工作笔记0015
- Django发送邮件
- oracle 查询创建了哪些存储过程
- BZOJ4471 : 随机数生成器Ⅱ
- 系统学习NLP(三十二)--BERT、XLNet、RoBERTa、ALBERT及知识蒸馏
- ngrok 通过外网链接映射到本地机器,支持http,https
- 计算机组成与体系结构(软件设计师备考笔记)
- css阿拉伯数字,css 古文排版(含阿拉伯数字)
- 组合模式-完美处理树形递归结构
- 计算机网络的基本组成包括哪些,计算机网络的基本组成是什么?
- SAP中的client
- java实现仓储选址_邮局选址问题 (Java代码)并不难