直指OfferII088.爬台阶的最少风险

原创
小哥 3年前 (2022-11-10) 阅读数 9 #大杂烩

746. 以最低成本爬楼梯(javascript)746. Min Cost Climbing Stairs

数组的每个下标都充当一个步骤,即第一步。 i 这些步骤对应于非负的物理成本值。 cost[i](下标从 0 开始)。

每爬一步,你都要花费相应的体力值。一旦你支付了相应的体力值,你可以选择爬一步或两步。

请找出到达地板顶部的最低费用。开始时,您可以从下标中选择。 0 或 1 元素作为初始阶梯。

示例 1:

输入:cost = [10, 15, 20]
输出:15
说明:最低成本来自。 cost[1] 首先,要走两步才能到达梯子的顶端,总共需要花费 15 。

示例 2:

输入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出:6
说明:最低成本来自。 cost[0] 开始,逐一检查。 1 ,跳过 cost[3] ,总成本 6 。

解决问题的过程来自: https://leetcode-cn.com/problems/min-cost-climbing-stairs/solution/shi-yong-zui-xiao-hua-fei-pa-lou-ti-by-l-ncf8/

假设数组const长度为len,则len这些步骤分别对应于下标。0到len-1,问题等价性和计算到达下标len可以通过动态规划解决的最小成本:

  1. 创建长度len+1的数组pd,其中pd[i]指示已到达下标。i最低成本。
  2. 因为可以选择下标0或下标1作为初始阶梯pd[0]=pd[1]=0
  3. 当2≤i≤n 可以来自下标。i-1使用cost[i-1]到达下标的成本i,或从下标i-2使用cost[i-2]到达下标的成本i为了最小化总成本,pd[i]应取上述两项的最小值,因此状态转移如下。
    pd[i]=Math.min(cost[i-1]+pd[i-1],cost[i-2]+pd[i-2])

    var minCostClimbingStairs = function(cost) { let len=cost.length let pd=[] pd[0]=pd[1]=0 for(let i=2;i<=len;i++){ pd[i]=Math.min(cost[i-1]+pd[i-1],cost[i-2]+pd[i-2]) } return pd[len] };

leetcode: https://leetcode-cn.com/problems/GzCJIP/

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除