描述

有一个消息包含A-Z通过以下规则编码

‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26
现在给你一个加密过后的消息,问有几种解码的方式

我们不能解码空串,因此若消息为空,你应该返回0。
消息的长度 n \leq 100n≤100

您在真实的面试中是否遇到过这个题?
样例
样例 1:

输入: “12”
输出: 2
解释: 它可以被解码为 AB (1 2) 或 L (12).
样例 2:

输入: “10”
输出: 1

思路
动态规划,从s的位置1读起,每次读取两个数,因为只要是1-9的数,都可以单独出现,因此,dp表可以初始化为1,为了避免第二个条件[i-1]无法执行,我们使得dp表从位置2开始修改,dp位置0,1的值都初始化为1

情况
#特殊情况 输入’’ 则无法解码,可直接返回 0
#输入0 则无法解码,可直接返回 0
#若为 00 或 30、40、50… 则无法解码,可直接返回 0
#为 10、20 的情况,则 i 处字符必须与前一位结合,则为双字符解码
dp[i + 1] = dp[i - 1]
若数字为10-26:既可以单字解码,又可以双字解码 dp[i + 1] = dp[i] + dp[i - 1]
#1-9,27-29、31-39、41~49…只能单字解码 dp[i + 1] = dp[i]

class Solution:def numDecodings(self, s):if len(s)==0: return 0 #特殊情况 输入'' 则无法解码,可直接返回 0if s[0]=="0":return 0 #输入0 则无法解码,可直接返回 0dp = [0] * (len(s) + 1)dp[0],dp[1]=1,1for i in range(1, len(s)):if s[i] == '0':if int(s[i - 1]) > 2 or int(s[i - 1]) == 0: #若为 00 或 30、40、50... 则无法解码,可直接返回 0;return 0dp[i + 1] = dp[i - 1] #为 10、20 的情况,则 i 处字符必须与前一位结合,则为双字符解码elif 9 < int(s[i - 1:i + 1]) < 27:dp[i + 1] = dp[i] + dp[i - 1] #既可以单字解码,又可以双字解码else:dp[i + 1] = dp[i]#1-9,27~29、31~39、41~49....只能单字解码return dp[-1]
test = Solution()
s_li = ["9", "226", "300"]
for s in s_li:print(test.numDecodings(s))

结果:
1
3
0

leetcode解码方法(动态规划python)相关推荐

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

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

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

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

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

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

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

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

  5. leetcode最大矩形 (动态规划 python)

    描述 给你一个二维矩阵,权值为False和True,找到一个最大的矩形,使得里面的值全部为True,输出它的面积 您在真实的面试中是否遇到过这个题? 样例 样例1 输入: [ [1, 1, 0, 0, ...

  6. LeetCode 371. 两整数之和(异或操作) / 639. 解码方法 II(动态规划)/ 437. 路径总和 III

    371. 两整数之和 2021.9.26 每日一题 题目描述 给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和. 示例 1: 输入:a = 1, b = 2 ...

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

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

  8. leetcode动态规划(python与c++)

    1 . 斐波那契数 class Solution:def fib(self, n: int) -> int:# if n==0:# return 0# elif n==1:# return 1# ...

  9. LeetCode 90子集Ⅱ91解码方法

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

最新文章

  1. android 计算执行时间
  2. MapReduce中的partitioner
  3. 同域下跨文档通信iframe和window.open
  4. python散点图图例只显示一个标记点_python – Matplotlib图例:如何分配多个散点值...
  5. iphone已停用怎么解锁_两种无密码解锁iPhone锁屏密码的方法
  6. Apt-get使用指南
  7. Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制
  8. mysql取消外键限制_mysql怎么取消外键限制(约束)?
  9. Linux下的虚拟机安装
  10. 如何更换清华源_树莓派中国软件源
  11. Charles的iOS应用程序
  12. 单机 docker 部署fastfds_云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白...
  13. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析
  14. windows网络编程头文件注意事项
  15. 计算机二级C++知识点归纳之公共基础
  16. 中医电脑cac处方系统 v1.3.3.8 免费
  17. 频率相噪中相关公式、名词注释详解
  18. Windows 7设备管理器有未知设备怎么办?
  19. 如何解决Win10电脑网速慢的问题?
  20. 五个角度浅析大数据与BI的区别

热门文章

  1. Android——浙理体育(飞翔的红蜻蜓)训练记录上传与查询测试DEMO解决方案
  2. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十一章——自编解析与答案
  3. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(十六)利用PC端和移动端BUG
  4. MyBatis Plus——启动/关闭控制台LOGO
  5. Python——七段数码管绘制
  6. opencv立方体的画法_最详细的立方体透视变化及画法讲解
  7. Matlab图像处理创新实践-实验1【图像滤波基础(1)】
  8. sql-labs page1 (1~20)解题过程记录
  9. 关于selenium+java,实现部分截图功能,-针对单个元素的截图
  10. 记一次院赛CTF的Pwn和Misc题(入门)