前端算法系列-动态规范01

33 阅读1分钟

不是贪心刷不起,而是动态规划更有性价比

动态规划五步曲

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

509. 斐波那契数

var fib = function(n) {
    if(n <= 1) return n
    let dp = [0,1]
    for(let i=2;i<=n;i++){
        dp[i] = dp[i-1] + dp[i-2]
    }
    return dp[dp.length - 1]
};

70. 爬楼梯

var climbStairs = function (n) {
    let dp = new Array(n).fill(0)
    dp[0] = 1
    dp[1] = 2
    for (let i = 2; i < n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2]
    }
    return dp[n-1]
};

746. 使用最小花费爬楼梯

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

    return dp[cost.length]
};