📅  最后修改于: 2023-12-03 15:09:29.995000             🧑  作者: Mango
假设你正在爬楼梯,需要从底部走到顶部,楼梯总共有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值会造成时间和空间的浪费;而动态规划实现效率高,但是需要额外的空间存储状态。在实际开发中,应根据具体情况选择合适的方法。