思路
用动态规划的思想去做, 只要跳到倒数第二阶和倒数第一阶的时候,可以完成跳跃操作。
维护一个数组,存放跳到每阶时候的最小花费。设到i阶的时候,它有可能是从i-2阶跳上来的,也可能是i-1跳上来的,所以:
f(i) = min(f(i-1)+cost[i], f(i-2)+cost[i])
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0] * len(cost)
for n in range(len(cost)):
# 选取起点
if n < 2:
dp[n] = cost[n]
else:
dp[n] = min(dp[n-1]+cost[n], dp[n-2]+cost[n])
return min(dp[len(cost)-1], dp[len(cost)-2])
扩展
你能优化下内存