这里有一个关键点要注意,最终是要爬到楼层顶部。
设置一个dp数组来存放到达该阶梯所需要的最小花费,如dp[2]表示到达阶梯2的最小花费。
可以如上图所示,要想爬到顶部,可以从阶梯0或者阶梯1出发,要到达top,有两种方法:
要么从cost[1]开始爬两步,所需消耗体力为dp[1]+cost[1],
要么从cost[2]开始爬一步,所需消耗体力为dp[2]+cost[2],dp[2]又有两种思路,从0走两步,dp[0]+cost[0],或者从1走一步dp[1]+cost[1]。
观察上式可知如下公式:
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
求出dp数组可得到达每一层阶梯的最小花费,dp[len(cost)]即为所求
代码如下:
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp=[0,0]
heigth=len(cost)
for i in range(2,heigth+1):
minumn=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
dp.append(minumn)
return dp[heigth]
因为可以直接从第0层或第1层出发,我们直接设置这两层的花费为0