LeetCode 实战 / 03
70. 爬楼梯 (Easy) - 动态规划
📝 题目:每次爬 1 或 2 阶,问爬到第 n 阶有多少种方法
思路:经典斐波那契 dp[n] = dp[n-1] + dp[n-2]
class Solution:
def climbStairs(self, n: int) -> int:
"""
空间优化的动态规划
时间: O(n)
空间: O(1)
"""
if n <= 2:
return n
prev2 = 1 # dp[i-2]
prev1 = 2 # dp[i-1]
for i in range(3, n + 1):
curr = prev1 + prev2
prev2 = prev1
prev1 = curr
return prev1
# 测试
sol = Solution()
print(sol.climbStairs(5)) # 8
print(sol.climbStairs(10)) # 89
📊 刷题进度表
| 分类 | 题数 | 重要程度 |
|---|---|---|
| 哈希表 | 5 | ⭐⭐⭐⭐⭐ |
| 双指针 | 4 | ⭐⭐⭐⭐ |
| 滑动窗口 | 4 | ⭐⭐⭐⭐ |
| 栈 | 6 | ⭐⭐⭐⭐ |
| 链表 | 14 | ⭐⭐⭐⭐ |
| 二叉树 | 15 | ⭐⭐⭐⭐⭐ |
| 回溯 | 8 | ⭐⭐⭐⭐ |
| 二分查找 | 6 | ⭐⭐⭐⭐ |
| 动态规划 | 15 | ⭐⭐⭐⭐⭐ |
| 贪心 | 4 | ⭐⭐⭐ |