leetcode746[Min Cost Climbing Stairs]

使用最小花费爬楼梯 ,题目描述如下:

数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。

每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。

您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。

比如[1,100,1,1]对应的最小花费就是1+1=2,[1,100,110,1]对应的最小花费就是100+1=101。

显然本题是一道动态规划题,假设从第i层出发的最小花费为min_cost[i],因为只能从上一层或者上上一层爬到本层,所以从本层出发的最小花费为前两层中最小的最小花费加上本层的花费,动态规划方程为min_cost[i]=min(min_cost[i-1],min_cost[i-2])+cost[i],方便起见可以令出出发层和目的层的cost为0,另外每次循环只需要前两层的min_cost,且最后只要目的层的min_cost,因此只需要两个变量存储,那么代码就很简单了。

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int last = cost[0];
        int last_last = cost[1];
        cost.push_back(0);
        for(int i =2;i<cost.size();++i)
        {
           int current = min(last,last_last)+cost[i];
           last = last_last;
           last_last = current;
        }
        return last_last;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章