动态规划(二) ---斐波那契型深度解析

一、使用最小花费爬楼梯

题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)

题目:给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。

示例一:输入:cost = [10,15,20]  输出:15

示例二:输入:cost = [1,100,1,1,1,100,1,1,100,1] 输出:6

先来分析一下题目:判断一下顶部的位置

根据我们的动规算法原理逐步分析:

a. 状态表示

根据题目要求判断,dp[i] 表示到达 i 位置时的最小花费。

b. 状态转移方程 

用之前或之后的状态,推导出 dp[i] 的值。

c.初始化

初始化是为了保证填表时不越界。 

d. 填表顺序

有题目和图可知,要知道后面的就必须先算出前面的,所以,填表顺序:从左往右。 

e. 返回值 

由状态表示可知,返回值为 dp[n]

编写代码: 

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n=cost.size();//1、创建dp表vector<int> dp(n+1);//2、初始化dp[0]=dp[1]=0;//填表for(int i=2;i<=n;++i){dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);}return dp[n];}
};

 

二、解码方法

题目链接: 91. 解码方法 - 力扣(LeetCode)

题目:一条包含字母 A-Z 的消息通过以下映射进行了编码 :

"1" -> 'A'
"2" -> 'B'
...
"25" -> 'Y'
"26" -> 'Z'

 然而,在解码已编码的消息时,你意识到有许多不同的方式来解码,因为有些编码被包含在其它编码当中("2" 和 "5" 与 "25")。
例如,"11106" 可以映射为:

  • "AAJF" ,将消息分组为 (1, 1, 10, 6)
  • "KJF" ,将消息分组为 (11, 10, 6)
  • 消息不能分组为  (1, 11, 06) ,因为 "06" 不是一个合法编码(只有 "6" 是合法的)。

注意,可能存在无法解码的字符串。给你一个只含数字的 非空 字符串 s ,请计算并返回 解码方法的总数 。如果没有合法的方式解码整个字符串,返回 0

示例一:输入:s="12"  输出:2

示例二:输入:s="226"  输出:3

示例三:输入:s="06"  输出:0

先来分析一下题目给的示例: 

a. 状态表示

根据题目判断:

b. 状态转移方程 

根据最近的一步来划分问题

 c. 初始化

d. 填表顺序  ---从左向右

e. 返回值  ---dp[n-1]

编写代码:

class Solution {
public:int numDecodings(string s) {int n=s.size();//1、创建dp表vector<int> dp(n);//2、初始化dp[0]=s[0]!='0'; //dp[0]的情况//处理只有一个字符的情况if(n==1) return dp[0];//dp[1]的情况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;//3、填表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];}return dp[n-1];}
};

优化方案:

在上面代码中,我们发现了,有部分代码,相似度非常高,而且我们在进行初始化的时候,好像有点麻烦,那有没有什么办法,能简化一下呢?

在我们增加虚拟节点的值时要注意:

1、虚拟节点的值,要保证后面的填表是正确的

2、要注意下标的映射关系 

编写优化方案代码: 

class Solution {
public:int numDecodings(string s) {int n=s.size();vector<int> dp(n+1);dp[0]=1;//保证后面的填表是正确的dp[1]=s[0]!='0'; //要注意下标的映射关系for(int i=2;i<=n;++i){if(s[i-1]!='0') dp[i]+=dp[i-1];int t=(s[i-2]-'0')*10+(s[i-1]-'0');if(t>=10&&t<=26) dp[i]+=dp[i-2];}return dp[n];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/485423.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009

项目是个老项目&#xff0c;依赖包也比较大&#xff0c;咱就按正常流程走一遍来详细解决这个问题&#xff0c;先看一下node版本&#xff0c;我用的是nvm管理的&#xff0c;详细可以看我的其他文章 友情提醒&#xff1a;如果项目比较老&#xff0c;包又大&#xff0c;又有一些需…

Luma 视频生成 API 对接说明

Luma 视频生成 API 对接说明 随着 AI 的应用变广&#xff0c;各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的视频。 Luma 是一个专业高质量的视频生成平…

三维扫描检测在汽车制造中的应用

三维扫描&#xff0c;通过先进三维扫描技术获取产品和物体的形面三维数据&#xff0c;建立实物的三维图档&#xff0c;满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维数字化存档、逆向设计、产品开发、直接3D打印制造或辅助加工制造等一系列的应用。 三维扫描…

应用案例 | 船舶海洋: 水下无人航行器数字样机功能模型构建

水下无人航行器数字样机功能模型构建 一、项目背景 为响应水下装备系统研制数字化转型及装备系统数字样机建设的需要&#xff0c;以某型号水下无人航行器&#xff08;Underwater Unmanned Vehicle&#xff0c;UUV&#xff09;为例&#xff0c;构建UUV数字样机1.0功能模型。针对…

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…

P4645 [COCI2006-2007#3] BICIKLI(Tarjan+topsort求到某点的方案数)

P4645 [COCI2006-2007#3] BICIKLI - 洛谷 | 计算机科学教育新生态 思路&#xff1a; 我们考虑输出inf的情况&#xff0c;可以发现当从1出发到2经过的任意一个点处于一个环内时&#xff0c;路径条数是无穷多的。 有向图上从s到t的经过点&#xff0c;就是从s出发所能经过的所有…

基于eFramework车控车设中间件介绍

车设的发展&#xff0c;起源于汽车工业萌芽之初&#xff0c;经历了机械式操作的原始粗犷&#xff0c;到电子式调控技术的巨大飞跃&#xff0c;到如今智能化座舱普及&#xff0c;远程车控已然成为汽车标配&#xff0c;车设功能选项也呈现出爆发式增长&#xff0c;渐趋多元繁杂。…

【AI系统】模型压缩基本介绍

基本介绍 随着神经网络模型的复杂性和规模不断增加&#xff0c;模型对存储空间和计算资源的需求越来越多&#xff0c;使得部署和运行成本显著上升。模型压缩的目标是通过减少模型的存储空间、减少计算量或提高模型的计算效率&#xff0c;从而在保持模型性能的同时&#xff0c;…

解决Unity编辑器Inspector视图中文注释乱码

1.问题介绍 新创建一个脚本&#xff0c;用VS打开编辑&#xff0c;增加一行中文注释保存&#xff0c;在Unity中找到该脚本并选中&#xff0c;Inspector视图中预览的显示内容&#xff0c;该中文注释显示为乱码&#xff0c;如下图所示&#xff1a; 2.图示解决步骤 按上述步骤操作…

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展&#xff0c;旅游已经成为人…

【错误记录】Android Studio 开发环境内存占用过多 ( 记录内存使用情况 )

文章目录 一、报错信息二、AS 内存记录分析 一、报错信息 使用 Android Studio 一段时间后 , 内存爆了 , 占用了 10G 的内存 ; 二、AS 内存记录分析 AS 刚启动时 , 只占 2014M 内存 ; 编译运行程序后 , 内存变为 2800M 左右 ; 设置显示的运行程序对应的日志 , 占用内存 就会稳定…

开发类似的同款小程序系统制作流程

很多老板想要开发一款和别人家类似的同款小程序系统&#xff0c;但是不知道该怎么开发制作&#xff0c;本文就为大家详细介绍一下开发类似的同款小程序的流程为大家做参考。 一、前期准备找到对标小程序&#xff1a;首先&#xff0c;需要找到你想要模仿的同款小程序&#xff0…

三轴云台之光学变焦功能篇

三轴云台的光学变焦功能是其重要的性能特点之一&#xff0c;该功能允许用户在不改变相机与拍摄对象之间物理距离的情况下&#xff0c;通过调整镜头的焦距来改变拍摄对象的放大倍数或视野范围。 一、光学变焦的原理 光学变焦是通过改变镜头内部的透镜组合来改变焦距的。当镜头中…

android WebRtc 无法推流以及拉流有视频无声音问题

最近在开发使用WebRtc进行视频通话和语音通话&#xff0c;我使用的设备是MTK的手机&#xff0c;期间后台的技术人员几乎没法提供任何帮助&#xff0c;只有接口和测试的web端&#xff0c;有遇到不能推流。推流成功网页端有画面有声音&#xff0c;但是安卓端有画面&#xff0c;没…

锻造船用发动机动力系统,铸强船舶“心脏”

船舶是海洋、湖泊及河流中重要的水上交通工具&#xff0c;不仅能够促进海上经济的发展&#xff0c;还能够保卫国家的制海权。船舶动力装置&#xff0c;也就是船舶的核心动力源——船用发动机动力系统对船舶的重要作用不言自明&#xff0c;关系到船舶的性能质量&#xff0c;能够…

uniapp 自定义导航栏增加首页按钮,仿微信小程序操作胶囊

实现效果如图 抽成组件navbar.vue&#xff0c;放入分包 <template><view class"header-nav-box":style"{height:Props.imgShow?:statusBarHeightpx,background:Props.imgShow?:Props.bgColor||#ffffff;}"><!-- 是否使用图片背景 false…

WPF中的VisualState(视觉状态)

以前在设置控件样式或自定义控件时&#xff0c;都是使用触发器来进行样式更改。触发器可以在属性值发生更改时启动操作。 像这样&#xff1a; <Style TargetType"ListBoxItem"><Setter Property"Opacity" Value"0.5" /><Setter …

Java 实现手机号码归属地查询

1.pom坐标 <dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>geocoder</artifactId><version>2.205</version></dependency> 2.代码 package test;import com.alibaba.excel.util.StringUtils; im…

C 进阶 — 数据在内存中的存储

C 进阶 — 数据在内存中的存储 主要内容 1、数据类型详细介绍 2、整形在内存中的存储&#xff1a;原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 一 数据类型介绍 基本内置类型 char //字符数据类型 1 short //短整型 …

工作:SolidWorks从3D文件导出2D的DWG或DXF类型文件方法

工作&#xff1a;SolidWorks从3D文件导出2D的DWG或DXF类型文件方法 SolidWorks从3D文件导出2D的DWG或2D DXF类型文件方法&#xff08;一&#xff09;打开3D文件&#xff08;二&#xff09;从装配体到工程图&#xff08;三&#xff09;拖出想要的角度的图型&#xff08;四&#…