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

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。

解答

解题步骤:

  1. 确定 dp 数组以及下标的含义:dp数组代表走到每个台阶的最小花费
  2. 确定递推公式:可以爬一级或两级,说明最小花费是前一级或前两级的最小花费
  3. dp 数组如何初始化
  4. 确定遍历顺序

    1. /**
    2. * @param {number[]} cost
    3. * @return {number}
    4. */
    5. var minCostClimbingStairs = function(cost) {
    6. if (cost.length <= 2) return Math.min.apply(null, cost);
    7. let i = 2,
    8. len = cost.length,
    9. dp = cost.slice(0, 2);
    10. while (i < len) {
    11. dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];
    12. ++i;
    13. }
    14. return Math.min(dp[len - 1], dp[len - 2]);
    15. };