746.使用最小花费爬楼梯
【LetMeFly】746.使用最小花费爬楼梯:动态规划(原地)——不用什么从递归到递推
力扣题目链接:https://leetcode.cn/problems/min-cost-climbing-stairs/
给你一个整数数组 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$,我从$i-1$来合适还是从$i-2$来合适呢?当然是哪个花费小从哪个来。因此就有了所谓的“动态规划转移方程”:
$$cost[i] += min(cost[i - 1], cost[i - 2])$$
注意本题“顶部”的费用没给,因此视为$0$即可。问题解决了。
- 时间复杂度$O(len(costs))$
- 空间复杂度$O(1)$
AC代码
C++
1 |
|
Python
1 |
|
同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/135046961
746.使用最小花费爬楼梯
https://blog.letmefly.xyz/2023/12/17/LeetCode 0746.使用最小花费爬楼梯/