【LeetCode】NO.746 使用最小花费怕楼梯(C++ & Python) [动态规划]

题目:使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

  1. 到达最后一个楼梯之后还要在前进一步才能到达楼顶
  2. 到达楼顶可以认为是前面走过的路花费最小的加上当前状态下标的花费之后一步踏上楼顶
    当把每一个位置的最小花费求出来之后,选择最后两个中最小的那个,因为这个两个都能到达楼顶,花费最小的那个才是答案;

代码

C++ 版本


class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp(cost.size());


        dp[0] = cost[0];
        dp[1] = cost[1];
        for(int i = 2; i<cost.size(); i++)
        {
            dp[i] = min(dp[i-1],dp[i-2])+cost[i];
        }
        for(int i=0; i<cost.size();i++)
        {
            cout<<dp[i]<<" ";
        }
        return min(dp[cost.size()-2],dp[cost.size()-1]);
    }
};

Python

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        dp = [0]*(len(cost))
        dp[0] = cost[0]
        dp[1] = cost[1]
        for i in range(2, len(cost)):
            dp[i] = min(dp[i-2],dp[i-1])+cost[i]
        return min(dp[-1],dp[-2])

posted @ 2021-12-31 17:03  jucw  阅读(66)  评论(0编辑  收藏  举报