剑指 Offer II 088. 爬楼梯的最少成本

发布时间 2023-04-25 09:36:30作者: 猥琐丑八怪

剑指 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作为最后一个台阶

再次提交通过