📅  最后修改于: 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)。
本文介绍了使用动态规划方法求解楼梯问题的思路和代码实现,希望能够对你有所帮助。