爬楼梯(leetcode 70) 答案需包括解题思路、伪代码、流程图和代码。
时间: 2024-10-07 13:07:10 浏览: 52
leetcode_Search-a-2D-Matrix.zip_leetcode
爬楼梯问题是LeetCode上的经典动态规划问题,编号为第70题,通常被称为“ Climbing Stairs”。该问题描述的是一个人有n级台阶,每次可以爬1阶或2阶,问他有多少种不同的方式能够到达最顶层。这里我们可以通过备忘录法(记忆化搜索)或者自底向上的动态规划方法求解。
**解题思路**:
1. 初始化:对于每层楼,我们都需要知道从第0层到第i层有多少种走法。如果只有一层,显然就只有1种方法;如果有两层,就有1(直接上)+ 1(先上一阶再上)种方法。
2. 动态转移:对于三层及以上的楼层,我们可以计算前两层的所有走法之和,即第i层的走法数等于从第(i-2)层走两步。
**伪代码**:
```
function climbStairs(n):
dp = [0] * (n + 1)
dp[0], dp[1] = 1, 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
```
**流程图**:
1. 初始化一个长度为n+1的数组dp,其中dp[i]表示到达第i层的方法数。
2. 设置初始状态:dp[0] = 1,dp[1] = 1。
3. 对于i从2到n,遍历数组,dp[i] = dp[i-1] + dp[i-2]。
4. 循环结束后,返回dp[n]作为结果。
**代码(Python)**:
```python
def climbStairs(n):
if n == 0 or n == 1:
return n
dp = [0] * (n + 1)
dp[0], dp[1] = 1, 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
# 测试
print(climbStairs(3)) # 输出 3,因为可以从第一层上1阶到第三层,也可以从第二层上两阶到第三层
```
阅读全文