剑指 Offer II 088. 爬楼梯的最少成本 - 力扣(LeetCode)
代码:
class Solution(object): def minCostClimbingStairs(self, cost): """ :type cost: List[int] :rtype: int """ # 以i结尾,花费最少体力值为f[i] # f[i]=min(f[i-1]+cost[i],f[i-2]+cost[i]) # f[n-1] f=[0 for i in range(len(cost)+1)] cost.append(0) f[0]=cost[0] f[1]=cost[1] for i in range(2,len(f)): f[i]=min(f[i-1],f[i-2])+cost[i] return f[-1]
分析:
先思考建立状态。以i结尾时,到达i花费最少体力为f[ i ]。
再状态转移,到达i时有两种选择,从i-1或者i-2到i,两者取最小的再加上i需要花费的体力cost[ i ]。
最后得出状态转移:f[ i ]=min(f[i-1],f[i-1])+cost[i],f=[0 for i in range(len(cost))]
初始赋值f[0]=cost[0],f[1]=cost[1]
第一次代码提交发现通过,但逻辑没错,提示下标越界,多次看题目和查看代码发现题目没有理解透
尝试猜测到达最后一阶时,是还要跳出的,所以最后添加了一个0作为最后一个台阶
再次提交通过