假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
时间: 2023-11-13 14:02:52 浏览: 119
70. 爬楼梯
这是一个经典的动态规划问题。我们可以用一个数组 dp 来记录到达每个台阶的不同方法数,其中 dp[i] 表示到达第 i 个台阶的不同方法数。根据题意,可以得出以下状态转移方程:
dp[i] = dp[i-1] + dp[i-2]
意思是到达第 i 个台阶的不同方法数等于到达第 i-1 个台阶的不同方法数加上到达第 i-2 个台阶的不同方法数。因为每次可以爬 1 或 2 个台阶,所以到达第 i 个台阶的方法数只能是从第 i-1 或 i-2 个台阶转移而来。
初始状态为 dp[0] = 1,表示到达第 0 个台阶的方法数为 1(也就是不用爬);dp[1] = 1,表示到达第 1 个台阶的方法数为 1(只能爬 1 个台阶)。
最终的答案为 dp[n],表示到达第 n 个台阶的不同方法数。
下面是具体的 Python 代码实现:
```python
def climbStairs(n: int) -> int:
if n <= 1:
return 1
dp = [0] * (n + 1)
dp[0] = 1
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
```
时间复杂度为 O(n),空间复杂度为 O(n)。
阅读全文