LeetCode 70. 爬楼梯 使用c++解答

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

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

示例 1:

复制代码
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶

示例 2:

复制代码
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

提示:

  • 1 <= n <= 45

是一道有趣的题目,可以用来当成动态规划的入门练习

复制代码
class Solution {
public:
    int climbStairs(int n) {
        if (n <= 1) {
            return 1;
        }
        int prev1 = 1;
        int prev2 = 1;
        for (int i = 2; i <= n; ++i) {
            int current = prev1 + prev2;
            prev1 = prev2;
            prev2 = current;
        }
        return prev2;
    }
};
  1. prev1 和 prev2 的含义:

    • prev1 表示爬到前一阶楼梯的方法数。
    • prev2 表示爬到前两阶楼梯的方法数。

例子分析

假设 n=5,即求解爬到第 5 个台阶的方法总数。

  1. 初始状态:

    • prev1 = 1(f(1))
    • prev2 = 1(f(0))
  2. 迭代过程:

    • i=2i = 2i=2:
      • current = prev1 + prev2 = 1 + 1 = 2(f(2))
      • 更新:prev1 = 1,prev2 = 2
    • i=3i = 3i=3:
      • current = prev1 + prev2 = 1 + 2 = 3(f(3))
      • 更新:prev1 = 2,prev2 = 3
    • i=4i = 4i=4:
      • current = prev1 + prev2 = 2 + 3 = 5(f(4))
      • 更新:prev1 = 3,prev2 = 5
    • i=5i = 5i=5:
      • current = prev1 + prev2 = 3 + 5 = 8(f(5))
      • 更新:prev1 = 5,prev2 = 8
  3. 结果:

    • prev2 最终为 8,即爬到第 5 个台阶的方法总数。
相关推荐
hanlin0326 分钟前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode
一拳一个呆瓜31 分钟前
【STL】文件系统导航
c++·stl
All for pursuit.1 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
栈帧之外1 小时前
【C++】STL之set
开发语言·c++
zhanghaha13142 小时前
C++构造函数的一些其他应用(逐词逐句保姆讲解)
c++
jimy13 小时前
c++的 Type Traits (二、更详细版本)
开发语言·c++
碧海银沙音频科技研究院3 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法
通问AI3 小时前
在两台 Mac Studio 上跑 800B 模型:MLX + RDMA over Thunderbolt 实测与四道门选型法
算法
ZywOo6233 小时前
《算法竞赛进阶指南》0x03 前缀和与差分
算法
Scintilla_y4 小时前
DAY2 滑动窗口
算法·leetcode·散列表