【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 <= n <= 45

解题思路

要爬到第n阶台阶,最后一步只有两种选择:

  1. 从第n−1阶爬 1 个台阶到达;
  2. 从第n−2阶爬 2 个台阶到达。

因此,爬n阶的方法数 = 爬n−1阶的方法数 + 爬n−2阶的方法数,即递推公式:f(n)=f(n−1)+f(n−2)

初始条件

  • 当n=1时,只有 1 种方法(直接爬 1 阶),即f(1)=1;
  • 当n=2时,有 2 种方法(1+1、2),即f(2)=2。

Python代码:

python 复制代码
class Solution:
    def climbStairs(self, n: int) -> int:
        """
        计算爬n阶楼梯的不同方法数(每次可爬1或2阶)
        :param n: 楼梯总阶数,1 <= n <= 45
        :return: 不同的爬楼方法数
        """
        # 边界条件:n=1返回1,n=2返回2
        if n <= 2:
            return n

        # 初始化状态:
        # prev_1 对应 f(n-2),prev_2 对应 f(n-1)
        prev_1, prev_2 = 1, 2

        # 从第3阶开始递推计算到第n阶
        for i in range(3, n + 1):
            # 当前阶数的方法数 = 前两阶方法数之和
            current = prev_1 + prev_2
            # 更新状态:为下一次循环准备(滑动窗口)
            prev_1, prev_2 = prev_2, current

        # 循环结束后,prev_2 存储的是f(n)
        return prev_2


# 测试用例(本地运行验证)
if __name__ == "__main__":
    solution = Solution()
    # 测试案例1:n=2,预期输出2
    print(f"n=2时,爬楼方法数:{solution.climbStairs(2)}")  # 输出2
    # 测试案例2:n=3,预期输出3
    print(f"n=3时,爬楼方法数:{solution.climbStairs(3)}")  # 输出3
    # 测试案例3:n=5,预期输出8
    print(f"n=5时,爬楼方法数:{solution.climbStairs(5)}")  # 输出8

LeetCode提交代码:

python 复制代码
class Solution:
    def climbStairs(self, n: int) -> int:
        # 处理边界情况
        if n <= 2:
            return n
        # 初始化前两个状态(n=1时为1,n=2时为2)
        prev_1, prev_2 = 1, 2
        # 从n=3开始递推
        for _ in range(3, n + 1):
            current = prev_1 + prev_2
            prev_1, prev_2 = prev_2, current
        return prev_2

程序运行截图展示:

总结

该问题要求计算爬n阶楼梯的方法数,每次可爬1或2阶。通过分析发现,爬n阶的方法数等于前两阶方法数之和,即斐波那契数列的变种。递推公式为f(n)=f(n-1)+f(n-2),初始条件f(1)=1,f(2)=2。采用动态规划优化空间复杂度至O(1),通过滑动窗口(prev_1和prev_2)迭代计算。Python实现中,边界条件直接返回n,循环从3到n递推,最终返回prev_2。测试案例验证了代码正确性,适用于1≤n≤45的输入范围。

相关推荐
智驱力人工智能20 小时前
矿山皮带锚杆等异物识别 从事故预防到智慧矿山的工程实践 锚杆检测 矿山皮带铁丝异物AI预警系统 工厂皮带木桩异物实时预警技术
人工智能·算法·安全·yolo·目标检测·计算机视觉·边缘计算
Python_Study202520 小时前
制造业企业如何构建高效数据采集系统:从挑战到实践
大数据·网络·数据结构·人工智能·架构
忆锦紫20 小时前
图像降噪算法:中值滤波算法及MATLAB实现
图像处理·算法·matlab
知乎的哥廷根数学学派20 小时前
基于多分辨率注意力脉冲神经网络的机械振动信号故障诊断算法(西储大学轴承数据,Pytorch)
人工智能·pytorch·深度学习·神经网络·算法·机器学习
kebijuelun20 小时前
Qwen 团队提出 ArenaRL:面向开放式 Agent RL 任务
人工智能·算法·语言模型·transformer
机器学习之心20 小时前
PSO优化的K-means++聚类算法用于用户用电行为分析的实现方案
算法·kmeans·聚类
小黄鸭code20 小时前
C++ 算法笔试题(常见算法版)
c++·算法·排序算法
曲幽20 小时前
FastAPI缓存提速实战:手把手教你用Redis为接口注入“记忆”
redis·python·cache·fastapi·web·asyncio
lixinnnn.20 小时前
优先级队列:最小函数值
数据结构·算法
Xの哲學20 小时前
Linux Worklet 深入剖析: 轻量级延迟执行机制
linux·服务器·网络·数据结构·算法