python假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
时间: 2024-09-13 22:15:48 浏览: 54
斐波那契数列 爬楼梯问题 python & php版
这是一个经典的动态规划问题,通常称为爬楼梯问题。问题的解法可以通过递归和记忆化搜索来实现,也可以直接使用动态规划的方法。这里提供一个简单的动态规划解决方案。
思路是这样的:假设 `dp[i]` 表示到达第 `i` 阶楼梯有多少种方法。如果我们站在第 `i` 阶楼梯上,那么我们之前只能是从第 `i-1` 阶或第 `i-2` 阶楼梯上来的。因此,到达第 `i` 阶楼梯的方法数等于到达第 `i-1` 阶和第 `i-2` 阶楼梯的方法数之和。所以状态转移方程可以表示为 `dp[i] = dp[i-1] + dp[i-2]`。
初始条件是 `dp[1] = 1`(只有一种方法到达第一阶)和 `dp[2] = 2`(有两种方法到达第二阶,一次爬两个台阶或者分两次各爬一个台阶)。
下面是基于这个思路的 Python 代码实现:
```python
def climbStairs(n):
if n <= 2:
return n
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]
# 示例
n = 5
print(climbStairs(n)) # 输出方法数
```
对于这个问题,如果你输入楼梯数 `n` 为 5,那么输出的结果将是 8,因为有8种不同的方法可以爬到楼顶。
阅读全文