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

力扣 70. 爬楼梯

题目来源:https://leetcode.cn/problems/climbing-stairs/description/

C++题解(来源代码随想录): 本质上是一道斐波那契数题。

动规五部曲:定义一个一维数组来记录不同楼层的状态

  1. 确定dp数组以及下标的含义。dp[i]: 爬到第i层楼梯,有dp[i]种方法
  2. 确定递推公式。如何可以推出dp[i]呢?首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么;还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么;那么dp[i]就是 dp[i - 1]与dp[i - 2]之和!所以dp[i] = dp[i - 1] + dp[i - 2] 。
  3. dp数组如何初始化。dp[1] = 1,dp[2] = 2
  4. 确定遍历顺序。从递推公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,遍历顺序一定是从前向后遍历的
  5. 举例推导dp数组。
class Solution {
public:int climbStairs(int n) {if (n <= 1) return n; // 因为下面直接对dp[2]操作了,防止空指针vector<int> dp(n + 1);dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; i++) { // 注意i是从3开始的dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
};
class Solution {
public:int climbStairs(int n) {if(n <= 2) return n;vector<int> dp(2);dp[0] = 1; dp[1] = 2;int sum = 0;for(int i = 2; i < n; i++) {sum = dp[0] + dp[1];dp[0] = dp[1];dp[1] = sum;}return sum;}
};

http://www.lryc.cn/news/104197.html

相关文章:

  • AVFoundation - 媒体捕捉
  • 【新版系统架构补充】-嵌入式技术
  • fpga开发--蜂鸣器发出连续不同的音调
  • Redis 主从同步原理
  • opencv-28 自适应阈值处理-cv2.adaptiveThreshold()
  • Java泛型5——泛型通配符
  • 牛客 AB25 ranko的手表 JAVA 枚举
  • 常微分方程建模R包ecode(二)——绘制相速矢量场
  • 学习C#编写上位机的基础知识和入门步骤:
  • 简单高效!低代码搭建销售自动化程序的方法与实践
  • 第九十三回 在Flutter中mock数据
  • 进程与线程的区别与联系
  • 使用gadl对土地利用栅格重分类
  • SQL-每日一题【1141. 查询近30天活跃用户数】
  • Java小型操作系统模拟(采用策略模式结合反射进行搭建,支持一些简单的命令)
  • VsCode与Idea编辑器更换背景图
  • Visual Studio 快捷键
  • IT技术面试中常见的问题及解答技巧
  • Java使用hive连接kyuubi
  • 性能测试基础知识(三)性能指标
  • 【 Redis】的乱码问题
  • 虚拟机安装的问题
  • seldom之数据驱动
  • 设计模式:生成器模式
  • Gradle同步任务一直不动问题(非网络情况)
  • STM32使用HAL库BH1750光照度传感器
  • qt代码练习
  • PoseiSwap:首个基于模块化设施构建的订单簿 DEX
  • Linux NameSpace 虚拟化 资源隔离
  • 【Android Framework系列】第9章 AMS之Hook实现登录页跳转