746.使用最小花费爬楼梯
😄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
思路
基本思想
假设到达最后的阶梯n的开销为f(n),f(n)肯定是由n-1走一步或者n-2走两步,加上自身的开销,选取一个小的构成的,也就是:
|
|
而选择了其中花费较小的阶梯之后,还需要从这个阶梯继续向前推导,也就是说从当前出发,看哪一步花销较小就走哪一步,一直模拟到起点,起点可以选择从0或者1开始意味着到这两点的开销为0
执行流程
从前向后遍历,到达阶梯n的花销为取n-1
和n-2
为起点的花销较小的部分
代码
根据以上分析,得出以下代码:
|
|
总结
遵循动态规划的步骤,先确定递推公式,之后再确定开始规划的元素初值,最后模拟规划的步骤即可
注意到达阶梯n的方法有两种,n-1走一步或者n-2走两步,本题中需要统计从n-1和n-2中那个出发花费较小,在每一个阶梯都是这么判断就可以获得最终结果