📜  寻找在楼梯案例中达到第K个台阶的方法数量(1)

📅  最后修改于: 2023-12-03 15:09:29.995000             🧑  作者: Mango

寻找在楼梯案例中达到第K个台阶的方法数量

问题描述

假设你正在爬楼梯,需要从底部走到顶部,楼梯总共有n个台阶。每次你可以爬1个或2个台阶。那么,到达第n个台阶总共有多少种不同的方法呢?

例如,当n=3时,有3种不同的方法:1+1+1, 1+2, 2+1。

思路

可以使用递归或动态规划来解决这个问题。

递归:

当n=1或n=2时,只有一种或两种方法到达终点。当n>2时,到达终点的方法数等于到达第n-1个台阶的方法数加上到达第n-2个台阶的方法数。

动态规划:

将每一个状态存储下来,避免重复计算。用一个数组dp来存储到达每一个台阶的方法数。其中,dp[0]=1,dp[1]=1,dp[i]=dp[i-1]+dp[i-2]。

示例代码
递归实现
def climb_stairs(n: int) -> int:
    if n == 1:
        return 1
    if n == 2:
        return 2
    return climb_stairs(n-1) + climb_stairs(n-2)
动态规划实现
def climb_stairs(n: int) -> int:
    dp = [1, 1]
    for i in range(2, n+1):
        dp.append(dp[i-1] + dp[i-2])
    return dp[n]
总结

本文简单介绍了在楼梯案例中寻找达到第K个台阶的方法数量,同时提供了递归和动态规划两种实现方式。其中,递归实现简单易懂,但是效率低下,对于大的n值会造成时间和空间的浪费;而动态规划实现效率高,但是需要额外的空间存储状态。在实际开发中,应根据具体情况选择合适的方法。