📌  相关文章
📜  使用多个1或2个步骤以及单个3个步骤,计算到达第N个楼梯的方式(1)

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

动态规划求解楼梯问题

问题描述

有一段楼梯,每次可以迈1个台阶或2个台阶,问到达第n个台阶一共有多少种不同的方式。

分析

我们可以使用动态规划的思想,将问题转化为子问题。设 dp[i] 表示到达第i个台阶的不同方式的数量,那么 dp[i] 可以从 dp[i-1]dp[i-2] 转移而来。

当我们从第 i-1 个台阶走一步的时候,就有 dp[i-1] 种走法。而当我们从第 i-2 个台阶走两步的时候,就有 dp[i-2] 种走法。因此 dp[i] = dp[i-1] + dp[i-2]

而当i=1时,有一种走法;当i=2时,有两种走法。

代码
def climbStairs(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    dp = [0] * (n+1)
    dp[1] = 1
    dp[2] = 2
    for i in range(3, n+1):
        dp[i] = dp[i-1] + dp[i-2]
    return dp[n]
时间复杂度

该算法中,我们遍历了1到n个台阶,所以时间复杂度为O(n)。

空间复杂度

该算法使用了长度为n+1的数组,因此空间复杂度为O(n)。

总结

本文介绍了使用动态规划方法求解楼梯问题的思路和代码实现,希望能够对你有所帮助。