题目描述
题解
先分析一下题目,就是一次可以跳一级或跳两级,这个就和 青蛙跳台阶 那题很像,只不过这里每一级加了一个花费。
思路:
(结合下图看)求到达当前阶梯C的耗费时,有两种可能:从s1跳两级上来;从s2跳一级上来。那么选择跳两级还是跳一级呢?就选耗费小的那一种方法,也就是min(s1,s2). s1和s2表示到达它们所在的楼梯的最小耗费。
C = cost[i] + min(s1,s2).
再走到下一个楼梯,s1就是之前的s2,s2就是之前的C…
这样一直循环到最后一级楼梯,这时结果并不是C,因为要到达终点(跳出cost数组),可以选择从黄色s1跳两级或者从黄色s2跳一级。所以选择耗费最小的,也就是min(s1,s2)。
上代码
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
s1,s2 = 0,0
for i in range(len(cost)):
c = cost[i] + min(s1, s2)
s1 = s2
s2 = c
return min(s1, s2)
时间复杂度:O(n)