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

70. 爬楼梯

目录

一、问题描述

二、解题思路

三、代码

四、复杂度分析


一、问题描述

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

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

二、解题思路

📌 举例分析:

  • n = 1 → 只有一种走法:[1]

  • n = 2 → 两种走法:[1,1], [2]

  • n = 3 → 三种走法:[1,1,1], [1,2], [2,1]

  • n = 4 → 五种走法:[1,1,1,1], [1,1,2], [1,2,1], [2,1,1], [2,2]

发现没?它的规律如下:

f(n)=f(n−1)+f(n−2)f(n) = f(n - 1) + f(n - 2)f(n)=f(n−1)+f(n−2)

意思是:

  • 如果最后一步是走 1 阶,那前面就是 f(n-1) 种走法;

  • 如果最后一步是走 2 阶,那前面就是 f(n-2) 种走法。

三、代码

class Solution {
public:int climbStairs(int n) {// 如果台阶数为1或2,直接返回n(因为1阶1种方法,2阶2种方法)if (n <= 2) return n;int prev2 = 1;  // 表示到达第1阶的方法数int prev1 = 2;  // 表示到达第2阶的方法数int current;    // 当前阶数的方法数,初始未定义// 从第3阶开始,依次推算到第n阶for (int i = 3; i <= n; ++i) {current = prev1 + prev2; // 第i阶的走法 = 第(i-1)阶 + 第(i-2)阶prev2 = prev1;           // 更新 prev2 为上一轮的 prev1prev1 = current;         // 更新 prev1 为当前结果}// 最终返回的是第n阶的走法总数return current;}
};

四、复杂度分析

时间复杂度O(n)
空间复杂度O(1)

相关文章:

  • 在浏览器中输入 URL 到页面加载完成都做了什么
  • HTTP:九.WEB机器人
  • 「数据可视化 D3系列」入门第九章:交互式操作详解
  • Linux学习——守护进程编程
  • Android平台 Hal AIDL 系列文章目录
  • 人工智能应用工程师(工信部教考中心)
  • 信息系统项目管理师_第十一章 项目采购管理
  • C++代码优化
  • 若依同步企业微信架构及ACTIVITI
  • 【VSCode】在 VSCode 中运行 HTML 页面并通过 HTTPS 访问
  • linux查看及修改用户过期时间
  • 【Java面试系列】Spring Boot微服务架构下的分布式事务设计与实现详解 - 3-5年Java开发必备知识
  • 【多线程-第四天-SDWebImage的常见面试题-进一步解读SDWebImage的源代码 Objective-C语言】
  • 使用Docker搭建开源Email服务器
  • stl 容器 – map
  • DDoS防御发展史
  • 7.Rust+Axum:打造高效 RESTful API 的最佳实践
  • Python中type()函数的深度探索:类型检查与动态类创建
  • 吴恩达强化学习复盘(1)聚类算法|K-Means算法
  • 解决jupyter notebook修改路径下没有c.NotebookApp.notebook_dir【建议收藏】
  • 两日内连续施压,特朗普再次喊话美联储降息
  • 广东将调查核算6宗非法开采稀土矿,公告比选技术服务供应商
  • 九部门:将符合条件的家政从业人员纳入公租房等保障范围
  • 让观众从演唱会现场走到商场,上海虹口构建“票根经济”生态链
  • 李强主持国务院第十三次专题学习
  • 用户办“云手机”业务未满月就被终止,广西联通称系商业测试发现技术问题后下架