假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的python方法可以爬到楼顶呢?
时间: 2024-09-18 09:17:09 浏览: 43
70. 爬楼梯
这个问题涉及经典的动态规划问题,通常称为“爬楼梯”或“阶跃序列”。对于 n 阶楼梯,我们可以利用递归或迭代的方式来解决。基本思路是考虑最后一步,如果是直接跨过两步(从n-2到n),或者是只走一步(从n-1到n)。因此,如果第 i 阶有解决方案,则第 i+1 阶有两种可能:一是从第 i-1 阶跨越上来,二是从第 i 阶直接上来。
如果我们用 dp[i] 表示到达第 i 阶的不同方法数,那么 dp[n] 就是我们想要的答案。初始状态 dp[0] 和 dp[1] 分别为1,因为到达第0阶和第1阶显然只有1种方法(即不爬或爬1阶)。
递归公式可以表示为:
dp[i] = dp[i-1] + dp[i-2] (i >= 2)
这是一个典型的斐波那契数列问题,可以用Python编写如下的动态规划代码:
```python
def climb_stairs(n):
if n == 1 or n == 2: # 基本情况,直接返回结果
return n
else:
dp = [0] * (n + 1) # 初始化dp数组
dp[0], dp[1] = 1, 1 # 第0、1阶各有1种方法
for i in range(2, n + 1): # 从2阶开始计算
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
# 测试方法
print(climb_stairs(4)) # 输出:4,说明有4种方法爬到第4阶
```
阅读全文