Leecode刷题解答
- 1、爬到索引为i的楼梯(第一层索引为0)的最小花费r[i]=min(r[i-1] + cost[i-1], r[i-2] + cost[i-2]), 确定了状态转移方程。但是注意r[i]定义为爬到第i层,并没有爬完整个楼梯,所以最后返回值并不是r[-1],而是min(r[-1]+cost[-1], r[-2]+cost[-2]),(r[-1]+cost[-1], r[-2]+cost[-2])分别可以理解为爬到倒数第一层和倒数第二层的最小花费(计算时不包括这一层)加上该层的花费,因为爬到倒数第二层或者倒数第一层之后只需要爬一步没有cost的楼层即可爬完整个楼梯。
class Solution:
def minCostClimbingStairs(self, cost):
"""
:type cost: List[int]
:rtype: int
"""
if len(cost) < 2 or len(cost) ==2:
return 0
r = list(range(len(cost)))
r[0] = 0
r[1] = 0
for i in range(2,len(cost)):
r[i] = min(r[i-1] + cost[i-1], r[i-2] + cost[i-2])
return min(r[-1]+cost[-1], r[-2]+cost[-2])