class Solution:
def fib(self, n: int) -> int:
if n == 0:
return 0
dp = [0, 1]
for i in range(2, n + 1):
sum = dp[0] + dp[1]
dp[0] = dp[1]
dp[1] = sum
return dp[1]
70.爬楼梯
要点
推出dp状态,dp[n] = dp[n-1] + dp[n-2]
对于dp[0],跳过定义是更符合对动态规划理解的
代码
class Solution:
def climbStairs(self, n: int) -> int:
if n <= 2:
return n
dp = [1, 2]
for i in range(3, n + 1):
sum_ = dp[0] + dp[1]
dp[0] = dp[1]
dp[1] = sum_
return dp[1]
746. 使用最小花费爬楼梯
要点
比较简单,理解了如何初始化dp就行
代码
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
n = len(cost)
dp = [0] * (n + 1)
dp[0] = 0
dp[1] = 0
for i in range(2, n + 1):
dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])
return dp[n]