写 dp 的老方法,推到出到达当前楼梯花费最小体力的公式 attach[n] = min(attach[n-1]+cost[i-1], attach[i-2]+cost[i-2])
。
使用老 dp 解法是维护个数组,可是从推导式中可以看出,attach[n]
只与未知的 attach[n-1]
和 attach[i-2]
有关,所以我们可以只维护这两个变量。
老 dp 维护数组解法:
class Solution(object):
def minCostClimbingStairs(self, cost):
"""
:type cost: List[int]
:rtype: int
"""
cost.append(0)
attachLadderCost = [0] * len(cost)
for i in range(2, len(cost)):
attachLadderCost[i] = min(attachLadderCost[i-2]+cost[i-2], attachLadderCost[i-1]+cost[i-1])
return attachLadderCost[len(cost)-1]
维护两个变量解法:
class Solution(object):
def minCostClimbingStairs(self, cost):
"""
:type cost: List[int]
:rtype: int
"""
p1, p2 = 0, 0
for i in range(2, len(cost)):
p1, p2 = p2, min(p2 + cost[i-1], p1 + cost[i-2]) # 可画图,一画图就懂
return p2
网友评论