Leetcode 91. 解码方法

【中等】力扣算法题解析LeetCode91:解码方法 本文介绍了一种动态规划方法来解决数字字符串解码问题。给定一个由数字组成的字符串,每个数字或数字组合(1到26)对应一个字母(A-Z),要求计算字符串所有可能的解码方式总数。核心思路是遍历字符串,通过状态转移处理当前字符单独解码或与前一个字符组合解码的情况。初始化时,空字符串的解码方式为1,首字符的解码方式取决于是否为0。遍历过程中,若当前字符为0,必须与前一个字符组合(10或20);否则,可单独解码或组合解码(10-26)。最终返回解码方式总数,若无法解码则返回0。 阅读详情

题目

一条包含字母 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) 。

解答

可以使用 动态规划 解决,本题具有最优子结构。

状态定义:dp[i] 表示 s[0 … i - 1] 的解码方法的个数。

状态转移:dp[i + 1] 即为当前 i 位置的数字作为 独立数字 和 个位数字 的解码方法之和。

详细情况如下:

  1. 独立数字:
    1. 是 0 :0 不能形成独立数字(编码是从 1 开始的),此种情况编码方法个数为 0。
    2. 不是 0 : 作为独立数字,那么此种情况编码方法个数取决于 dp[i] 。
  2. 作为个位数字:如果能作为个位数字,那么此种情况编码方法个数取决于 dp[i - 1] 。

初始化:dp[0] = 1 。

结果:dp[n] 。

复杂度:O(n) 时间,O(n) 空间。

代码
class Solution {
    public int numDecodings(String s) {
        int n = s.length();
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for(int i = 0; i < n; i ++) {
            char cur = s.charAt(i);
            dp[i + 1] = cur == '0' ? 0 : dp[i];
            if(i > 0 && (s.charAt(i - 1) == '1' || (s.charAt(i - 1) == '2' && (cur - '0') <= 6))) 
                dp[i + 1] += dp[i - 1];
        }
        
        return dp[n];
    }
}
结果

在这里插入图片描述

力扣--91. 解码方法 力扣–91. 解码方法 文章目录力扣--91. 解码方法一、题目描述二、解题思路三、代码 一、题目描述 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 示例 2: 输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), " 阅读详情

相关推荐

POWER(十一)charge pump原理

电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。

zhlwsh的博客 2799

力扣LeetCode #91 解码方法(NumDecodings)

- 题目描述 一条包含字母 A-Z 的消息通过以下方式进行了编码: 字母 数字 ‘A’ 1 给定一个只包含数字的非空字符串,请计算解码方法的总数。 题目数据保证答案肯定是一个 32 位的整数。 示例 1: 输入:“12” 输出:2 解释:它可以解码为 “AB”(1 2)或者 “L”(12)。 示例 2: 输入:“226” 输出:3 解释:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。 示例 3: 输入:s = “0” 输出:0 示例

weixin_49155948的博客 531

基于8086微机原理数字钟计时器系统设计

*单片机设计介绍,基于8086微机原理数字钟计时器系统设计。

2201_75940997的博客 1279

力扣第91题 解码方法

一条包含字母A-Z给定一个只包含数字的非空字符串,解码方法的总数是多少?

weixin_48941116的博客 850

STM32 RC522串口驱动程序 (简单直接)

rc522作为使用非常多的读写卡芯片,使用SPI芯片读写应用已经非常广了。但有些时候我们只有串口可以使用,或者我们觉得串口使用更加方便,那么就必须要编写串口的驱动程序。不过很难找到可以直接使用的串口程序。所以在此将我这边写好的串口驱动写好如下: 直接上代码 下面是RC522.C的驱动文件。支持读写卡号8位数据。rc522用的是stm32 的串口3,调试显示是串口1; #include "rc522.h" #include "delay.h" /////////////////////////////////

qq_42074368的博客 9001

XGBoost算法案例 - 红酒品质分类

数据集共包含 11 个特征,共计 3269 条数据. 我们通过训练模型来预测红酒的品质, 品质共有 6 个各类别,分别使用数字: 0、1、2、3、4、5 来表示。

YIAN爱学习的博客 449

LeetCode 91 —— 91.解码方法

我们以 121023 作为例子。我们初始化 DP 和 s[0…

刘伟佳的博客 1万+

无人机避障——卡内基梅隆大学(CMU)CERLAB 无人机自主框架复现

CMUCERLAB无人机自主框架是一个模块化的无人机自主导航系统,包含感知、测绘、规划和控制等组件。安装过程中遇到的主要问题包括:(1)cv_bridge路径未正确识别,需手动指定路径;(2)OpenCV版本冲突(4.2与4.6),导致动态导航节点崩溃。解决方案包括:完全卸载OpenCV4.2,重新编译安装OpenCV4.6,并修改相关CMakeLists文件指定版本。最终成功运行仿真环境,实现无人机在Gazebo和RViz中的自主避障导航功能。

weixin_45390670的博客 1644

LeetCode 力扣 91. 解码方法

題目描述(中等难度) 每个数字对应一个字母,给一串数字,问有几种解码方式。例如 226 可以有三种,2|2|6,22|6,2|26。 解法一 递归 很容易想到递归去解决,将大问题化作小问题。 比如 232232323232。 对于第一个字母我们有两种划分方式。 2|32232323232 和 23|2232323232 所以,如果我们分别知道了上边划分的右半部分 32232323232 的解码方...

wind_liang的博客 1136

STDP实战:用PyTorch从零搭建脉冲神经网络(附完整代码)

本文提供了基于PyTorch从零搭建脉冲神经网络的实战教程,重点讲解了STDP学习规则的原理与工程实现。通过构建LIF神经元模型和向量化STDP层,并结合泊松编码,详细演示了如何构建一个能够进行无监督特征学习的混合网络架构,为探索神经形态计算和低功耗实时学习方案提供了完整代码与实践指南。

weixin_29056145的博客 263

2025高教社数学建模国赛A题 - 烟幕干扰弹的投放策略(完整参考论文)

摘要:本研究基于模拟遗传退火算法优化无人机投放烟幕弹策略,建立三维运动学模型分析遮蔽效果。针对不同战术场景(单机单弹至多机多弹),构建以遮蔽时间最大化为目标的非线性优化模型。通过改进遗传算法求解最优参数组合,结果显示在给定条件下单枚烟幕弹对M1导弹的有效遮蔽时长可达1.4秒。研究为无人机协同干扰提供了高效解决方案,验证了智能算法在复杂战术决策中的适用性。关键词:烟幕干扰;无人机投弹;运动学建模;时序优化;遗传算法。

ProminentWu的博客 544

力扣完全平方数279和力扣91解码方法的做题笔记

动态规划的状态定义dp[i]:表示前i个字符的解码方式数。例如,dp[1]表示前 1 个字符的解码方式数。dp[2]表示前 2 个字符的解码方式数。以此类推。

lfm147258369的博客 1284

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站

以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3550

leetcode91. 解码方法,动态规划

leetcode91. 解码方法,动态规划

热爱C++和golang的学生 2817

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

dp 力扣 91. 解码方法

力扣 91. 解码方法 题目: 链接https://leetcode.cn/problems/decode-ways/ 思路: 使用动态规划思想 根据题目可得 题目要求为 并返回解码方法的总数,从A-Z就是1-26,把数组里的数组两两组合或者不组合得到大方案数 。 dp[i]定义为 从起点dp[0]到dp[i]的解码方法的总数的集合 dp状态为count 这题有几个边界条件 1、不能组01-09的数 2、数字以0开头就无法组成任何一种方案,因为0不能单独为一个数并且边界条件1。 3、不能组成26以上的数字

爪蛙毁一生的博客 337

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【LeetCode】91. 解码方法

本文介绍了解决"解码方法"问题的动态规划解法。题目要求将数字字符串解码为字母组合(1-26对应A-Z),计算所有可能的解码方式。核心思路是使用动态规划,状态转移考虑单字符和双字符两种解码方式,并处理前导零等边界情况。时间复杂度O(n),空间复杂度可优化至O(1)。示例展示了不同字符串的解码过程,如"226"有3种解码方式,而"06"因前导零无法解码。

qq_32019341的博客 1380

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode 91.解码方法

LeetCode 91.解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 示例 2: 输入: "226" 输出: 3 解释: 它可以解...

缇欧的咪西 404

LeetCode:91. 解码方法(python)

LeetCode:91. 解码方法(python) 一条包含字母 A-Z 的消息通过以下方式进行了编码: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: “12” 输出: 2 解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。 示例 2: 输入: “226” 输出: 3 解释...

wk的博客 1068

动态规划-91.解码方法-力扣(LeetCode)

根据状态转移方程,我们需要对dp[0]和dp[1]初始化,对于dp[0]只有1或0两种可能,而dp[i]则有三种可能0,1,2,还需要注意处理越界问题,在跑示例的时候会遇到的,这里不做过多赘述。我们状态表示定义dp[i]表示:以i位置为结尾,解码方法的总方法数,所以返回dp[n-1],这里的n是给定string的长度。将对应字符转化为数字,我们知道有的大写字母范围是在[1,9],剩下的则是[10,26],这个对应关系使我们解题的关键。dp[i]表示:以i位置为结尾时,解码方法总数。根据最近的一步划分问题。

black_bear_white的博客 369

LeetCode91. 解码方法

LeetCode91. 解码方法 题目链接 题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 题目数据保证答案肯定是一个 32 位的整数。 示例: 输入:s = “12” 输出:2 解释:它可以解码为 “AB”(1 2)或者 “L”(12)。 分析: 状态表示:f(i),所有由前i个数字解码得到的字符串 属性:计算解码得到的字符串集合数量 集合

Loser_you的博客 180

LeetCode第91题_解码方法

一条包含字母A-Z要解码已编码的消息,所有数字必须基于上述映射的方式,反向映射回字母(可能有多种方法)。例如,"11106""AAJF"(11 10 6)注意,对应于(1 11 06)的"AKF"不是有效的解码方案,因为"06"不能映射为"F",这是由于"6"和"06"在映射中并不等价。给你一个只含数字的非空字符串s,请计算并返回解码方法的总数。题目数据保证答案肯定是一个 32 位的整数。

qq_40263592的博客 1191

Leetcode91. 解码方法

Leetcode91. 解码方法 题目: 一条包含字母 A-Z 的消息通过以下方式进行了编码: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 示例 2: 输入: "226" 输出: 3 解释: 它可以解码...

会流泪de鱼的博客 409

力扣 -- 91.解码方法

力扣--dp.解码方法

weixin_70056514的博客 573

leetcode 91. 解码方法

''' leetcode 91. 解码方法 给定一个只包含数字的非空字符串,请计算解码方法的总数。 本问题属于计数问题 算法1:记忆化递归(recursion with memorization) 构造递归树 确定递归的终止条件: (1)子字符串的首字母为'0' (2)子字符串的长度为1 (3)子字符串为空字符串 然后当前字符串的解码方式总数=去掉首位字母的解码方式总数+去掉前两位字母的解码...

WYXHAHAHA123的博客 520

LeetCode 91 解码方法

LeetCode 91 解码方法

qq_43745578的博客 1474

LeetCode 91. 解码方法

LeetCode 91. 解码方法 题目 一条包含字母 A-Z 的消息通过以下方式进行了编码: ‘A’ -> 1 ‘B’ -> 2 … ‘Z’ -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: “12” 输出: 2 解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。 示例 2: 输入: “226” 输出: 3 解释: 它可以解码为...

Ailecccc的博客 677
上一篇: Leetcode 76. 最小覆盖子串
下一篇: Leetcode 93. 复原IP地址
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值