Leetcode—70.爬楼梯【简单】

2023每日刷题(二十七)

Leetcode—70.爬楼梯

在这里插入图片描述

动态规划思想

动态规划算法的本质是使用空间换时间,通过计算和记录状态来得到最优解。

在分析动态规划类题目时,我们可以通过3个问题对题目进行基本的拆解。

  • 1.问题是否分阶段,阶段是什么?
  • 2.与问题的最优解有关的子问题是什么?
  • 3.透过不同阶段、最优解和子问题,我们应当关注(计算和记录)的状态具体是什么?

前两个问题比较容易回答。

1.爬楼梯是分阶段的,到达楼顶所需的n级台阶即对应的n个阶段。

2.题目的最优解是指最终到达楼顶,有多少种不同的实现方法;每个阶段都可以对应一个子问题,即有多少种不同的方法可以到达当前台阶。

关键在于第3个问题。根据题目描述“每次可以爬1或2个台阶”,这句话定义了状态之间的关联关系,决定了状态转移的规则。

假设当前台阶为n,上述规则决定了我们可以通过两个阶段到达这里:从n-1台阶爬1步,或者从n-2台阶爬2步,因此到达台阶n可能的方法总数等于到达台阶n-1和台阶n-2的可能总数之和,这符合我们看到题目时马上会有的“直觉”,越往上走可能的走法越多。

使用数组dp记录到达每一个台阶可能的方法数,上述逻辑可以表示为dp[i]=dp[i-1]+dp[i-2]。通过这个状态转移函数,我们可以从1级台阶、2级台阶开始计算出到达3级台阶、4级台阶乃至n级台阶不同方法的总量。

实现代码

int climbStairs(int n) {int dp[50] = {0};if(n < 2) {return n;}dp[1] = 1;dp[2] = 2;for(int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
}

运行结果

在这里插入图片描述
● 时间复杂度:O(n),n为台阶数。
● 空间复杂度:O(n),n为台阶数。

动态规划优化算法思路

观察解法一,每次计算用到的被记录状态都是dp[i-1]、dp[i-2],除非有其他需要,否则单纯计算最终解并不用保留中间过程的结果,dp[i]对dp[i-1]和dp[i-2]的依赖使用两个变量即可记录,例如,定义变量first和second。用常数个变量代替长度为n的线性存储结构,使空间复杂度由O(n)降低至O(1),在提高存储效率的同时执行效率也会得到提升。

优化算法后实现代码

int climbStairs(int n) {int dp[50] = {0};if(n < 2) {return n;}int first = 1;int second = 2;for(int i = 3; i <= n; i++) {second = first + second;first = second - first;}return second;
}

运行结果

在这里插入图片描述
● 时间复杂度:O(n),n为台阶数。
● 空间复杂度:O(1)。

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

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

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

相关文章

基于rosbridge 与业务系统长链接网关架构设计

技术背景&#xff1a; 业务系统&#xff1a;管理机器人&#xff0c;机器人任务执行等等 机器人使用是ros1 &#xff0c;业务系统与机器人交互使用rosbridge, rosbridge 就是websocket 链接&#xff0c;所以就有了如下的一些架构思想 架构图 客户端 客户端主要分为app端、pc端…

数据结构第四课 -----线性表之栈

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

keepalived+haproxy配置集群和负载均衡

1、简介 1.1. Keepalived Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备…

旺店通·企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口

旺店通企业版对接打通金蝶云星空查询调拨单接口与分布式调入单新增接口 源系统:旺店通企业版 旺店通是北京掌上先机网络科技有限公司旗下品牌&#xff0c;国内的零售云服务提供商&#xff0c;基于云计算SaaS服务模式&#xff0c;以体系化解决方案&#xff0c;助力零售企业数字化…

通过ping来测试网络带宽

在windows下通过 ping -l 5000 192.168.31.1 其中5000为设置ping的单个包的大小 192.168.31.1为目的地地址 假设ping 5000字节平均耗费1ms而ping 45000字节平均耗费4ms&#xff0c;因此&#xff0c;往返额外花费3ms单程额外花费1.5ms&#xff0c;多发送40000字节即320000比特…

从0到0.01入门 Webpack| 002.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

数据结构 | 图

最小生成树算法 Prime算法 算法思路&#xff1a;从已选顶点所关联的未选边中找出权重最小的边&#xff0c;并且生成树不存在环。 其中&#xff0c;已选顶点是构成最小生成树的结点&#xff0c;未选边是不属于生成树中的边。 例子&#xff1a; 第一步&#xff1a; 假设我们从顶…

Webpack Bundle Analyzer包分析器

当我们需要分析打包文件dist里哪些资源可以进一步优化时&#xff0c;就可以使用包分析器插件webpack-bundle-analyzer。NPM上的介绍是使用交互式可缩放树图可视化 webpack 输出文件的大小。 我的是vue2项目。 1、webpack-bundle-analyzer插件的安装 $ npm install --save-dev…

linux中的工程管理工具makefile

makefile文件:Linux上的工程管理工具,可以实现自动化编译; 工程中的源文件不计其数,可以根据模块,功能等存储在不同的目录中; makefile可以提高编译效率,使用make命令每次只会编译那些修改了的或者依赖修改了的这些文件,没有修改的文件不会重新编译. VS底层就有自己的makefile文…

CRM系统对科技企业有哪些帮助

随着国家政策的倾斜和5G等相关基础技术的发展&#xff0c;中国人工智能产业在各方的共同推动下进入爆发式增长阶段&#xff0c;市场发展潜力巨大。CRM客户管理系统作为当下最热门的企业应用&#xff0c;同样市场前景广阔。那么&#xff0c;CRM系统对科技企业有哪些帮助&#xf…

千兆路由只有200M,原来是模式选择不对,也找到了内网不能通过动态域名访问内部服务的原因

本来1000M的宽带接入的&#xff0c;但是一测试发现只有200M&#xff0c;把电信叼了过来&#xff0c; 一测试发现宽带没问题&#xff0c;网线正常&#xff0c;网卡正常&#xff0c;只有可能是路由器的问题了&#xff0c;尴尬了&#xff0c;赶紧给满意好评放他走。回头好好研究一…

在qt的设计师界面没有QVTKOpenGLWidget这个类,只有QOpenGLWidget,那么我们如何得到QVTKOpenGLWidget呢?

文章目录 前言不过,时过境迁,QVTKOpenGLWidget用的越来越少,官方推荐使用qvtkopengnativewidget代替QVTKOpenGLWidget 前言 在qt的设计师界面没有QVTKOpenGLWidget这个类,只有QOpenGLWidget,我们要使用QVTKOpenGLWidget,那么我们如何得到QVTKOpenGLWidget呢? 不过,时过境迁,Q…