代码随想录算法训练营-动态规划-1|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
509. 斐波那契数
1 class Solution: 2 def fib(self, n: int) -> int: 3 if n <= 2: 4 return n 5 6 prev1, prev2 = 0, 1 7 for _ in range(2, n+1): 8 sum_value = prev1 + prev2 9 prev1, prev2 = prev2, sum_value 10 11 return prev2
1 class Solution: 2 def climbStairs(self, n: int) -> int: 3 if n <= 1: 4 return n 5 6 prev1, prev2 = 1, 2 7 8 for _ in range(3, n + 1): 9 curr = prev1 + prev2 10 prev1, prev2 = prev2, curr 11 12 return prev2
1 class Solution: 2 def minCostClimbingStairs(self, cost: List[int]) -> int: 3 dp0 = 0 # 初始值,表示从起点开始不需要花费体力 4 dp1 = 0 # 初始值,表示经过第一步不需要花费体力 5 6 for i in range(2, len(cost) + 1): 7 # 在第i步,可以选择从前一步(i-1)花费体力到达当前步,或者从前两步(i-2)花费体力到达当前步 8 # 选择其中花费体力较小的路径,加上当前步的花费,得到当前步的最小花费 9 dpi = min(dp1 + cost[i - 1], dp0 + cost[i - 2]) 10 11 dp0 = dp1 # 更新dp0为前一步的值,即上一次循环中的dp1 12 dp1 = dpi # 更新dp1为当前步的最小花费 13 14 return dp1 # 返回到达楼顶的最小花费