使用最小花费爬楼梯(LeetCode-746)

简介: 使用最小花费爬楼梯(LeetCode-746)

3. 使用最小花费爬楼梯(LeetCode-746)


题目

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


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


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


示例 1:

输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。
- 支付 15 ,向上爬两个台阶,到达楼梯顶部。
总花费为 15 。


示例 2:

输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。
- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
- 支付 1 ,向上爬一个台阶,到达楼梯顶部。
总花费为 6 。


提示:

2 <= cost.length <= 1000

0 <= cost[i] <= 999


思路

五部曲


定义: 爬到第 i 个台阶的最低花费为 dp[i]


当前台阶的最低花费与 i-1 和 i-2 台阶有关,应该是从( i-1 台阶最低消费+从 i-1 台阶向上爬的费用)和(i-2 台阶最低消费+从 i-2 台阶向上爬的费用) 中取较小值

d p [ i ] = m i n ( ( d p [ i − 1 ] + c o s t [ i − 1 ] ) , ( d p [ i − 2 ] + c o s t [ i − 2 ] ) )


初始值 dp[0]=0 dp[1]=0


显然从前往后


示例一应该是 dp[N]={0,0,10,15}


代码展示

class Solution
{
public:
    int minCostClimbingStairs(vector<int> &cost)
    {
        int N = cost.size() + 1;
        vector<int> dp(N);
        for (int i = 2; i < N; i++)
        {
            dp[i] = min((dp[i - 1] + cost[i - 1]), (dp[i - 2] + cost[i - 2]));
        }
        return dp[N-1];
    }
};


这题还是可以滚动数组优化

class Solution
{
public:
    int minCostClimbingStairs(vector<int> &cost)
    {
        int N = cost.size() + 1;
        vector<int> dp(2);
        int result;
        for (int i = 2; i < N; i++)
        {
            result = min((dp[1] + cost[i - 1]), (dp[0] + cost[i - 2]));
            dp[0] = dp[1];
            dp[1] = result;
        }
        return result;
    }
};
目录
相关文章
|
4月前
|
SQL
leetcode-SQL-1741. 查找每个员工花费的总时间
leetcode-SQL-1741. 查找每个员工花费的总时间
40 0
|
4月前
leetcode746使用最小花费爬楼梯刷题打卡
leetcode746使用最小花费爬楼梯刷题打卡
14 0
|
7月前
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
47 0
|
4天前
leetcode代码记录(使用最小花费爬楼梯
leetcode代码记录(使用最小花费爬楼梯
9 0
|
2月前
动态规划之使用最小花费爬楼梯【LeetCode】
动态规划之使用最小花费爬楼梯【LeetCode】
|
4月前
|
Java 索引
leetcode-746:使用最小花费爬楼梯
leetcode-746:使用最小花费爬楼梯
20 0
|
6月前
|
算法
代码随想录算法训练营第三十八天 | LeetCode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
代码随想录算法训练营第三十八天 | LeetCode 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
32 0
leetcode每日一题:746. 使用最小花费爬楼梯
leetcode每日一题:746. 使用最小花费爬楼梯
leetcode 746 使用最小花费爬楼梯
leetcode 746 使用最小花费爬楼梯
59 0
leetcode 746 使用最小花费爬楼梯
|
C++ Python
LeetCode 746. 使用最小花费爬楼梯 C/C++/Python——动态规划
LeetCode 746. 使用最小花费爬楼梯 C/C++/Python——动态规划
104 0