wuyijia

导航

代码随想录算法训练营-动态规划-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

70. 爬楼梯

 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

 746. 使用最小花费爬楼梯

 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  # 返回到达楼顶的最小花费

 

 

posted on 2023-09-23 11:47  小吴要努力  阅读(4)  评论(0编辑  收藏  举报