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

【LeetCode刷题笔记】动态规划 — 70.爬楼梯

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多算法知识专栏:算法分析🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述
LeetCode题解专栏:【LeetCode刷题笔记】


目录

  • 题目链接
  • 一、题目描述
  • 二、示例
  • 三、题目分析
    • dp数组的定义
    • 基础情况
    • 递推公式
  • 四、代码实现(C++)
  • 优化

题目链接

70. 爬楼梯- 力扣(LeetCode)

一、题目描述

假设你正在爬楼梯。需要n阶你才能到达楼顶。

每次你可以爬12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

二、示例

示例 1:

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:

输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

三、题目分析

根据题目一次1个或2个台阶,先考虑极端情况:只有一个台阶的情况和只有两个台阶的情况

  • 只有一个台阶:1种方法:爬1个台阶

  • 只有两个台阶:2种方法:爬两次1个台阶、爬一次2个台阶

在两个台阶的问题中,第一种方法包含了只有一个台阶的情况(爬两次1个台阶:即爬了一个台阶,此时只剩下一个台阶,转化为了只有一个台阶的问题)

三个台阶时,如果爬1个台阶,还剩2个台阶,转化为了2个台阶的问题;如果爬两个台阶,还剩1个台阶,转化为了1个台阶的问题

因此,三个台阶的方法等于一个台阶的方法 + 两个台阶的方法,为动态规划问题

dp数组的定义

dp[i] 爬到第i层楼梯,有dp[i]种⽅法

基础情况

第1个台阶和第2个台阶为最基础的情况,分别是1种、2种方法

dp[1] = 1;
dp[2] = 2;

递推公式

由题目分析可得:dp[i] = dp[i-1] + dp[i-2]

四、代码实现(C++)

class Solution {
public:int climbStairs(int n) {vector<int> dp(n+1);if(n == 1) return n;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];}
};

在这里插入图片描述

优化

以三个台阶为例,第三个台阶只依赖于前两个台阶的方法和,第i个台阶只依赖于i - 1i - 2的和

只需关注前两个的值,其余的可以不去考虑, vector<int> dp(n+1) 缩小为 dp[3],优化空间复杂度(在数据n较大的情况下)

class Solution {
public:int climbStairs(int n) {int dp[3];  	//dp[0]占1个if(n == 1) return n;if(n == 2) return n;dp[1] = 1;dp[2] = 2;int sum = 0;for(int i = 3;i <=n; i++){sum = dp[1] + dp[2];dp[1] = dp[2];dp[2] = sum;}return dp[2];}
};

** **


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!
如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
http://www.lryc.cn/news/164699.html

相关文章:

  • 2024腾讯校招后端面试真题汇总及其解答(三)
  • mysql的分组group by
  • Swoole 介绍以及 编译安装
  • Ubuntu终端指令
  • python给json 转实体类加注释的代码实现
  • 绘制三角波与梯形波
  • 【Git】 git push 提示Not possible to fast-forward,无法提交也无法提交程序
  • 优思学院|为什么质量工程师在别人看是“救火“的呢?
  • VMware Explore | 联想与VMware扩大合作带来生成式AI和多云解决方案
  • 8月份徒弟企业面试后反馈的软件测试面试题(含金量高请收藏)
  • 私有云不是真正的云计算!
  • netperf 测试时延和吞吐
  • 安卓预制权限添加规则
  • D3JS简介
  • 系统架构设计师(第二版)学习笔记----系统工程
  • java spring cloud 企业工程管理系统源码+二次开发+定制化服务
  • IMX6ULL移植篇-boot 命令的学习
  • Python字典和集合操作指南:创建、获取值、修改和删除键值对,复制和遍历方法全解析
  • unity 接收拼接数据进行纹理替换且保存相机纹理到rtsp server(一)
  • 视频讲解|3014 含分布式电源的配电网优化重构
  • 分布式、锁、延时任务
  • Mojo 语言官网
  • JTS:02 使用WKB操作数据
  • stonedb部署实践
  • wsl使用apt install net-tools报错
  • python 使用requests爬取百度图片并显示
  • DataSecurity Plus:守护企业数据安全的坚实堡垒
  • 《树莓派4B家庭服务器搭建指南》第二十一期:安装开源远程桌面服务rustdesk, 内网丝滑,外网流畅控制
  • Redis 分布式锁
  • 水循环原理VR实景教学课件开发