【Leetcode】746. Min Cost Climbing Stairs

题目地址:

https://leetcode.com/problems/min-cost-climbing-stairs/description/

解题思路:

官方给出的做法是倒着来,其实正着来也可以,无非就是进入某个step有两种方式,退出某一个

step也有两种方式,因此若用dp[i]表示进入第i步并预计从这里退出的最小值,dp[i] = cost[i] + min(dp[i-1],dp[i-2])

最后求退出时最小值,min(dp[i-1],dp[i])

真正写代码时不必用数组记录dp,用f1表示dp[i-2],f2表示dp[i-1].然后用dp[i-1],dp[i]更新f1,和f2

代码:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int f1 = cost[0];
        int f2 = cost[1];
        for (size_t i = 2; i < cost.size(); i++)
        {
            int f3 = cost.at(i) + min(f1, f2);
            f1 = f2;
            f2 = f3;
        }

        return min(f1,f2);
    }
};

猜你喜欢

转载自www.cnblogs.com/AndrewGhost/p/8944250.html