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

假设你正在爬楼梯。需要 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 <= 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. prev1prev2 的含义:

    • 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 = 1prev2 = 2
    • i=3i = 3i=3:
      • current = prev1 + prev2 = 1 + 2 = 3(f(3))
      • 更新:prev1 = 2prev2 = 3
    • i=4i = 4i=4:
      • current = prev1 + prev2 = 2 + 3 = 5(f(4))
      • 更新:prev1 = 3prev2 = 5
    • i=5i = 5i=5:
      • current = prev1 + prev2 = 3 + 5 = 8(f(5))
      • 更新:prev1 = 5prev2 = 8
  3. 结果

    • prev2 最终为 8,即爬到第 5 个台阶的方法总数。
相关推荐
闪电悠米2 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
栋***t2 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构
wabs6662 小时前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
CHANG_THE_WORLD2 小时前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
一拳一个呆瓜3 小时前
【STL】iostream 编程:使用提取运算符
c++·stl
我不是懒洋洋3 小时前
从零实现一个分布式日志平台:ELK的核心设计
c++
geovindu3 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
神仙别闹4 小时前
基于QT(C++)实现Windows 自启动项查看和分析
c++·windows·qt
微露清风4 小时前
模拟算法学习记录
学习·算法
KaMeidebaby4 小时前
卡梅德生物技术快报 | abcore 纳米抗体文库:从PNAS论文看纳米抗体理性设计:构象熵作为亲和力预测新指标的技术实现
java·开发语言·人工智能·算法·机器学习