leetcode 509 斐波那契数
递归:
class Solution:
def fib(self, n: int) -> int:
if n < 2:
return n
return self.fib(n - 1) + self.fib(n - 2)
动态规划:
class Solution:
def fib(self, n: int) -> int:
if n == 0:
return 0
dp = [0, 1]
for i in range(2, n + 1):
total = dp[0] + dp[1]
dp[0] = dp[1]
dp[1] = total
return dp[1]
leetcode 70 爬楼梯
难点在于分析dp数组的递推公式
class Solution:
def climbStairs(self, n: int) -> int:
if n <= 2:
return n
dp = [0, 1, 2]
for i in range(3, n + 1):
total = dp[1] + dp[2]
dp[1] = dp[2]
dp[2] = total
return dp[2]
leetcode 746 使用最小花费爬楼梯
- 确定dp数组以及其下标含义
- 分析递推公式
- 初始化dp数组
- 确定遍历顺序
- 举例推导dp数组
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0, 0]
for i in range(2, len(cost) + 1):
total = min(dp[0] + cost[i - 2], dp[1] + cost[i - 1])
dp[0] = dp[1]
dp[1] = total
return dp[1]
672

被折叠的 条评论
为什么被折叠?



