当前位置: 首页 > news >正文

【动态规划刷题 2】使⽤最⼩花费爬楼梯 解码⽅法

使⽤最⼩花费爬楼梯

746 . 使用最小花费爬楼梯
链接: 746 . 使用最小花费爬楼梯

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

示例 1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。

示例 2:
输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。

  • 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
  • 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
  • 支付 1 ,向上爬一个台阶,到达楼梯顶部。
    总花费为 6 。

1.状态表示

dp[i] 表示的是爬到第 i 阶楼梯时的最低花费。

2.状态转移方程

动态规划题,我们需要学会依靠经验和题目解析去猜测他们的状态转移方程。
爬到第i 阶位置,只有两种情况:

  1. 从 i-1 阶 爬一阶楼梯到 i;
  2. 从 i-2 阶 爬二阶楼梯到 i;

所以dp[i] 的值只需要 去其中的较小值即可,

dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

3. 初始化

从我们的递推公式可以看出, dp[i] 在 i = 0 以及 i = 1 的时候是没有办法进⾏推导的,因为dp[i-2] 或 dp[i-1] 不是⼀个有效的数据。

因此我们需要在填表之前,将0, 1的值初始化。题⽬中已经告诉我们
dp[0] = dp[1]=0

4. 填表顺序
按照数组下标的顺序,从左往右。

5. 返回值
应该返回 dp[n] 的值。

代码:

  int minCostClimbingStairs(vector<int>& cost) {int n=cost.size();vector<int> dp(n+1);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 . 解码方法
一条包含字母 A-Z 的消息通过以下映射进行了 编码 :
‘A’ -> “1”
‘B’ -> “2”

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

示例 1:
输入:s = “12”
输出:2
解释:它可以解码为 “AB”(1 2)或者 “L”(12)。

示例 2:
输入:s = “226”
输出:3
解释:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。

示例 3:
输入:s = “06”
输出:0
解释:“06” 无法映射到 “F” ,因为存在前导零(“6” 和 “06” 并不等价)。

1.状态表示

dp[i] 表示的是以第i位置为结尾时的解码方法数。

2.状态转移方程

动态规划题,我们需要学会依靠经验和题目解析去猜测他们的状态转移方程。
以 i-1 的位置进行分析,有两种情况:

  1. i位置是的数字在 1~9 之间,能单独表示一个字母
  2. i和i-1 位置的数字可以组成一个在 10 ~ 26 之间的一个字母

所以
i. 当 s[i] 上的数在 [1, 9] 区间上时: dp[i] += dp[i - 1]
ii. 当 s[i - 1] 与 s[i] 上的数结合后,在 [10, 26] 之间的时候: dp[i] +=dp[i - 2]

3. 初始化

从我们的递推公式可以看出, dp[i] 在 i = 0 以及 i = 1 的时候是没有办法进⾏推导的,因为dp[i-2] 或 dp[i-1] 不是⼀个有效的数据。

因此我们需要在填表之前,将0, 1的值初始化。

  1. 当s[0]不为‘0’ 时,dp[0]=1; 否则,dp[0]=0;
  2. 当s[1]!=‘0’ 时,dp[1]+=1; 当 s[0] 与 s[1] 上的数结合后,在 [10, 26] 之间的时,dp[1]+=1;

4. 填表顺序
按照数组下标的顺序,从左往右。

5. 返回值
应该返回 dp[n-1] 的值。

代码

    int numDecodings(string s) {//动态规划//创建dp[]数组//初始化//填表//返回值int n=s.size();vector<int> dp(n);//初始化if(s[0]=='0') return 0;dp[0]=1;if(n==1) return dp[0];if(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];}}return dp[n-1];
}

在这里插入图片描述

相关文章:

【动态规划刷题 2】使⽤最⼩花费爬楼梯 解码⽅法

使⽤最⼩花费爬楼梯 746 . 使用最小花费爬楼梯 链接: 746 . 使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 …...

Python的基本语法

“有人说&#xff0c;写python就像是坐在一个没有安全带的车上&#xff0c; 我认为这个说法很欠妥当&#xff0c; 应该是一辆没有外壳和座椅&#xff0c; 只有发动机和轮子的车&#xff0c; 并且车上摆满了轮子” python既然是作为一个工具&#xff0c;那么就不需要去深入…...

Kubernetes那点事儿——存储之存储卷

Kubernetes那点事儿——存储之存储卷 前言一、K8s数据卷一、临时存储卷emptyDir二、节点存储卷hostPath三、网络存储NFS 前言 在K8s中用Volume为容器提供了外部的存储能力。 Pod需要设置卷来源&#xff08;spec.volume&#xff09;和挂载点&#xff08;spec.containers.volumeM…...

Go语言中‘String’包中的‘Cut‘函数的实现

Go语言中‘String’包中的’Cut’函数的实现 ​ Cut函数用于在字符串**‘s’中查找子串’sep’&#xff0c;并将字符串’s’在子串 ‘sep’ 第一次出现的位置分割成两部分&#xff1a;before和after** package main import("fmt" "strings" ) func main(…...

【JAVASE】顺序和选择结构

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 顺序和选择 1. 顺序结构2. 分支结构2.1 …...

Oracle恢复删除的数据

不下心删除了生产库的数据或者不小心删除了一部分数据&#xff0c;如何恢复找回。 Oracle恢复删除数据的方法 方案一 利用oracle提供的闪回方法进行数据恢复&#xff0c;适用于delete删除方式 首先获取删除数据的时间点&#xff1a; select * from v$sql where sql_text l…...

(无人机方向)ros小白之键盘控制无人机(终端方式)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一&#xff1a;配置pycharm的ros开发环境二&#xff1a;核心代码讲解三 效果演示XTDrone 四 完整代码 前言 ubuntu 18.04 pycharm ros melodic 做一个在终端中…...

【python学习笔记】argparse --- 命令行选项、参数和子命令解析器

argparse 是 Python 的标准库中的一个模块&#xff0c;用于解析命令行参数。它提供了一种简单而灵活的方式来处理命令行输入&#xff0c;并生成易于使用的帮助文档。 使用 argparse 模块可以轻松地定义命令行参数和选项&#xff0c;并自动生成用法帮助和错误消息。示例&#x…...

【Java框架】RPC远程调用

RPC架构 一、RPC概述 RPC&#xff08;Remote Procedure Call&#xff09;叫作远程过程调用&#xff0c;它是利用网络从远程计算机上请求服务&#xff0c;可以理解为把程序的一部分放在其他远程计算机上执行。通过网络通信将调用请求发送至远程计算机后&#xff0c;利用远程计…...

云原生全栈体系(一)

云平台核心 第一章 为什么用云平台 环境统一按需付费即开即用稳定性强 一、国内常见云平台 阿里云、百度云、腾讯云、华为云、青云… 二、国外常见云平台 亚马逊 AWS、微软 Azure … 三、公有云 购买云服务商提供的公共服务器 公有云是最常见的云计算部署类型。公有云资…...

【【51单片机直流电机调速】】

学会电机调速&#xff0c;掌握中国速度 PWM的生成方法 先用户设定一个比较值&#xff0c;然后计数器定时自增。 当计数器<比较值&#xff0c;输出0 当计数器>比较值&#xff0c;输出1 main.c #include <REGX52.H> #include"delay.h" #include"…...

【Spring Boot】

目录 &#x1f36a;1 Spring Boot 的创建 &#x1f382;2 简单 Spring Boot 程序 &#x1f370;3 Spring Boot 配置文件 &#x1f36e;3.1 properties 基本语法 &#x1fad6;3.2 yml 配置文件说明 &#x1f36d;3.2.1 yml 基本语法 &#x1f369;3.3 配置文件里的配置类…...

使用docker 部署自己的chatgpt

直接docker部署 docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEYyour_api_key chenzhaoyu94/chatgpt-web:latestDocker compose部署 version: 3services:app:image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可ports…...

Python适配器模式介绍、使用方法

一、Python适配器模式介绍 适配器模式(Adapter Pattern) 是一种结构型设计模式&#xff0c;用于将不兼容的接口转换为另一种接口&#xff0c;以便系统间的协同工作。 功能&#xff1a; 适配器模式主要功能是将一个类的接口转换成客户端所期望的另一种接口&#xff0c;以满足…...

【数据结构】复杂度

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、什么是数据结构 二、什么是算法 三、算法的效率 四、时间复杂度 4.…...

【读点论文】PP-YOLOE: An evolved version of YOLO,面向友好部署的模型设计,为项目后续产业落地提供了更加有效的参考

PP-YOLOE: An evolved version of YOLO Abstract 在本报告中&#xff0c;我们介绍了PP-YOLOE&#xff0c;一种具有高性能和友好部署的工业最先进的目标探测器。我们在之前的PP-YOLOv2的基础上进行优化&#xff0c;采用无锚模式&#xff0c;更强大的骨干和颈部配备CSPRepResSt…...

微服务入门---SpringCloud(二)

微服务入门---SpringCloud&#xff08;二&#xff09; 1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置…...

51单片机IO口控制

51单片机IO口控制 1.点亮LED灯 原理&#xff1a;根据电路图&#xff0c;指向IO口的引脚&#xff1b;拉低电平&#xff0c;灯亮、 如图&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…...

ERROR 1064 - You have an error in your SQL syntax;

ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧&#xff0c;以前开始写SQL&#xff0c;特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…...

leetcode做题笔记46

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路一&#xff1a;回溯 void swap(int *nums,int index1,int index2) {int temp nums[index1];nums[index1] nums[index2];nums[index2] temp; }void prem(int* nu…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...