题解 | #最小花费爬楼梯#

最小花费爬楼梯

http://www.nowcoder.com/practice/6fe0302a058a4e4a834ee44af88435c7

动态规划

到达楼顶花费的最小值可以想成从楼顶往下2层或者从楼顶往下1层上来花费的最小值,由此递推,可设dp[i]为从第i楼往上走花费的最小值,则dp[i]的递推式为:

dp[i]=min{dp[i1],dp[i2]}+cost[i]dp[i] = min \{ dp[i-1],dp[i-2]\}+cost[i]

前面的min是找出到第i楼的最小花费,后面cost[i]则是从i楼向上走所需的花费。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param cost int整型vector 
     * @return int整型
     */
    int minCostClimbingStairs(vector<int>& cost) {
        // write code here
        if(cost.size()==1) return cost[0];
        vector<int> dp = {cost[0], cost[1]};
        for(int i = 2; i < cost.size(); i++){
            dp.push_back(min(dp[i-1],dp[i-2])+cost[i]); // 从第i楼走花费的最小值
        }
        return min(dp[dp.size()-1],dp[dp.size()-2]);
    }
};
全部评论

相关推荐

jack_miller:杜:你不用我那你就用我的美赞臣
点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务