LeetCode刷题笔记第746题:使用最小花费爬楼梯
题目:
花费每个楼梯的代价就能向上爬一个或两个楼梯,求最终登顶需要的最小代价。
想法:
使用动态规划的思想将每个楼梯向上爬需要花费的最小代价记录下来,最终获得登顶的最小代价。
class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n = len(cost)dp = [0] * (n + 1) # 创建一个n+1长度的数组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]
上述动态规划由于创建了一个长度为n+1的数组,因此空间复杂度为O(n),由于此题中每个状态仅与前两个状态有关,可以修改代码如下,使得空间复杂度降为O(1)
class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n = len(cost)a = 0b = 0for i in range(2, n + 1):a, b = b, min(b + cost[i - 1], a + cost[i - 2])return b