动态规划算法题目练习——91.解码方法
1.题目解析
题目来源:91.解码方法——力扣

测试用例

2.算法原理
基础版本
1.状态表示
由于题目只要求返回第i个位置的可能情况,则只需要开辟n(n=s.size())个大小的dp表即可
2.状态转移方程
题目可知第i个位置可以单独解码也可以与前一个位置组合解码,所以两种情况都需要讨论,当满足单独解码就加上前i-1个位置所有的可能性即可,当也满足与前一个位置组合解码就再加上前i-2个位置的所有可能性即可
3.初始化
需要初始化开始两个位置的值,其中dp[0]只需要判断第一个字符s[0]是否为'0'即可,为0则不能解码,dp[0]=0,反之可以解码则dp[0]=1
但是需要注意dp[1]需要判断的它本身是否可以单独解码还要判断是否可以和前一个位置组合解码
4.细节处理
需要注意这种解法不能处理n为1时的情况,需要单独处理n=1时返回dp[0]的值
5.返回值
由于只用返回第i个位置的可能性,所以映射的下标就是n-1,最后返回dp[n-1]即可

优化版本
1.状态表示
前面的基础版本中对于第二个位置的初始化有些多余,不如只用初始化第一个dp表的位置即可,所以这里使用虚拟位置来优化
由于多了一个虚拟位置,就需要创建dp(n+1)的dp表,第一个位置用作虚拟位置,此时对应的第i个位置映射的下标也为i,更加清晰
2.状态转移方程
这里主要讲解的是对于虚拟位置的值如何确定,首先dp[1]也就是原来的dp[0],直接初始化即可,但是如果要借助状态转移方程初始化dp[2]的时候,需要用到虚拟位置的情况就是在组合解码时,,也就是dp[2] += dp[2-2]时,此时因为已经确定了dp[2-1]可以与dp[2]组合解码也就是说dp[2-1]!='0',这时将dp[0]虚拟位置置为1即可
3.初始化
简化了之后只用初始化除虚拟位置的第一个位置即可
4.细节处理
dp表多了一个虚拟位置但是s字符串没有,所以需要在基础版本的情况下将s的映射-1
5.返回值
dp表多开了一个位置,直接返回dp[n]即可
3.实战代码
初始版本
class Solution {
public:int numDecodings(string s) {int n = s.size();//dp表默认初始化为0 vector<int> dp(n);dp[0] = (s[0] != '0');//特殊处理边界情况if(n == 1){return dp[0];}//当前两个数字都可以单独编码则加一种情况if(s[0] != '0' && s[1] != '0'){dp[1] += 1;}//当前两位可以组合编码则多一种情况int t = (s[0] - '0') * 10 + s[1] - '0';if(t >= 10 && t <= 26){dp[1] += 1;}for(int i = 2;i < n;i++){//当前位置可以单独编码if(s[i] != '0'){dp[i] += dp[i-1];}//当前位置可以和前一个位置组合编码int t = (s[i - 1] - '0') * 10 + s[i] - '0';if(t >= 10 && t <= 26){dp[i] += dp[i-2];}}//返回第n个位置,映射下标为n-1return dp[n-1];}
};
优化版本
class Solution {
public:int numDecodings(string s) {int n = s.size();vector<int> dp(n+1);//将新加入的位置置为1dp[0] = 1;//将原来的第一个位置的初始值右移dp[1] = (s[1-1] != '0');for(int i = 2;i <= n;i++){//当第i个位置可以单独解码则加上前i-1个位置的可能性//第i个位置的映射下标为i-1if(s[i-1] != '0'){dp[i] += dp[i - 1];}//当第i个位置可以与前一个位置组合解码则加上前i-2个位置的可能性//注意不能有前导0,所以t从10开始限制范围int t = (s[i-2] - '0')*10 + s[i-1] - '0';if(t >= 10 && t <= 26){dp[i] += dp[i-2];}}return dp[n];}
};
相关文章:
动态规划算法题目练习——91.解码方法
1.题目解析 题目来源:91.解码方法——力扣 测试用例 2.算法原理 基础版本 1.状态表示 由于题目只要求返回第i个位置的可能情况,则只需要开辟n(ns.size())个大小的dp表即可 2.状态转移方程 题目可知第i个位置可以单独解码也可以与前一个位置组合解码&am…...
每天一个数据分析题(四百九十二)- 主成分分析与因子分析
在因子分析中,因子载荷矩阵是用来表示( )。 A. 变量和因子之间的关系 B. 样本和因子之间的关系 C. 变量和样本之间的关系 D. 因子和因子之间的关系 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案…...
Linux shell编程学习笔记86:sensors命令——硬件体温计
0 引言 同事们使用的Windows系统电脑,经常莫名其妙地装上了鲁大师,鲁大师的一项功能是显示系统cpu等硬件的温度。 在Linux系统中,sensors命令可以提供类似的功能。 1 sensors命令 的安装和配置 1.1 sensors命令 的安装 要使用sensors命…...
基于SSM车位租赁系统【附源码】
基于SSM车位租赁系统 效果如下: 注册页面 首页展示 车位租赁订单展示 车位列表页面 公告信息管理页面 公告类型管理界面 研究背景 随着经济的持续增长和城市化进程的加速,土地资源变得日益紧缺,停车难问题已成为许多城市面临的共同挑战。随…...
JAVA开源项目 新生报到网站 计算机毕业设计
本文项目编号 T 002 ,文末自助获取源码 \color{red}{T002,文末自助获取源码} T002,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 提…...
QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题
1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …...
修改银河麒麟操作系统V10(SP1)网卡名称为ethx
修改银河麒麟桌面操作系统V10(SP1)网卡名称为ethx 步骤一:查看当前网卡信息步骤二:修改GRUB配置文件步骤三:更新GRUB配置步骤四:编辑网络接口文件步骤五:重启机器 💖The Begin&#…...
MySQL多表查询:标量子查询
先看我的emp表结构 emp表 子查询基本语法 select * from t1 where column1 (select column1 from t2);例子1:查询"销售部" 的所有员工信息 这个可以先拆解为两个 a.查询"销售部"的部门ID select id from dept where name 销售部; b. 根…...
C++学习笔记----8、掌握类与对象(六)---- 操作符重载(1)
经常在对象上执行如相加,比较,文件传输等操作。例如,spreadsheet只有在可以在上面执行自述运算才有用,比如对整行的单元格求和。所有这些都可以通过重载操作符来完成。 许多人发现操作符重载的语法复杂而令人迷惑。至少一开始是这…...
Ascend C 自定义算子开发:高效的算子实现
Ascend C 自定义算子开发:高效的算子实现 在 Ascend C 平台上,开发自定义算子能够充分发挥硬件的性能优势,帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例,介绍 Ascend C 中自定义算子的开发流程及关键技术…...
面向对象技术——设计模式
目录 层次结构 具体设计模式分类 创建型模式(处理创建对象) 结构型模式(处理类和对象的组合) 行为型模式(描述类或者对象的交互行为) 创建型设计模式 编辑 结构型设计模式 行为型设计模式编辑 …...
2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS 专栏跑道三 ➡️HCIP;H3C-SE;CCIP——…...
找不到concrt140.dll如何修复,快来试试这6种解决方法
concrt140.dll是微软Visual C 2015 Redistributable Package中的一个重要动态链接库文件,它在许多Windows应用程序中扮演着关键角色。本文将详细探讨concrt140.dll丢失的原因、影响、解决方法以及预防措施,帮助用户更好地理解和应对这一问题。 一、什么是…...
年会工作会议会务报名签到小程序开源版开发
年会工作会议会务报名签到小程序开源版开发 会议管理微信小程序,对会议流程、开支、数量、标准、供应商提供一种标准化的管理方法。以达到量化成本节约,风险缓解和服务质量提升的目的。适用于大型论坛、峰会、学术会议、政府大会、合作伙伴大会、经销商…...
UE C++ 实时加载模型的总结
一.总体思路: 如果实时加载UE模型,需要先将之前的模型删除。再生成出来,放在根节点,保持相对位置,相对的俯仰角。 void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z) {//m_weaponMap.Emp…...
实施威胁暴露管理、降低网络风险暴露的最佳实践
随着传统漏洞管理的发展,TEM 解决了因攻击面扩大和安全工具分散而产生的巨大风险。 主动式 TEM 方法优先考虑风险并与现有安全工具无缝集成,使组织能够在威胁被有效利用之前缓解威胁。 为什么威胁暴露管理 (TEM) 在现代网络安全策略中变得至关重要&…...
51.哀家要长脑子了!
1.P1003 [NOIP2011 提高组] 铺地毯 重复 模拟 要求覆盖在最上面的地毯编号,用四个数组abgk分别记录地毯起点的左下角横纵坐标,地毯的长度宽度,输入的坐标x y 当它满足大于等于左下角坐标 并且 小于等于 地毯左下角横纵坐标的时候…...
Overleaf 无法显示图片
问题描述 在Overleaf中的代码为: \begin{figure}\centering\includegraphics[width0.98\linewidth]{figures/test.png}\caption{This is a test.}\label{fig:test} \end{figure}但无法正常显示图片: 解决方案 修改编译模式为正常Normal而非快速Fast …...
如何实现 C/C++ 与 Python 的通信?
在现代编程中,C/C与Python的通信已经成为一种趋势,尤其是在需要高性能和灵活性的场景中。本文将深入探讨如何实现这两者之间的互通,包括基础和高级方法,帮助大家在混合编程中游刃有余。 C/C 调用 Python(基础篇&#…...
音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现
一、SCRIPTDATAVALUE类型 从《音视频入门基础:FLV专题(9)——Script Tag简介》中可以知道,根据《video_file_format_spec_v10_1.pdf》第80到81页,SCRIPTDATAVALUE类型由一个8位(1字节)的Type和…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
