前端算法 - 动态规划

17 阅读1分钟

1.爬楼梯问题

image.png

var climbStairs = function(n) {
    const dp = [1, 2]
    for (let i = 2; i < n; i++) {
        dp[i] = dp[i-1] + dp[i-2]
    }
    return dp[n - 1]
};

2.杨辉三角

image.png 分析:杨辉三角是动态规划二维解法的入门。首先杨辉三角的构成是:三角中边上的数字都是1,内部的数字是上面相邻的两个数字相加之和。

  • 分析最终状态(k状态)是什么?
    动态规划中k状态对应的是dp[x][y]数字
  • 最终k状态是受之前哪些状态影响
    即动态规划中k-1状态集合:对应dp[x][y]受到上一行dp[x-1]中的y-1和y两个元素之和
  • 下一步就是构建二维-动态规划数组
    如果dp[x][y]是三角形的边上,也就是对应二维数组的开头和结尾,那么值为1; 如果dp[x][y]是三角形的内部,那就是上一行dp[x-1]中的y-1和y两个元素之和。
var generate = function(numRows) {
    let result = [[]]
        for (let row = 0; row < numRows; row++) {
            const arr = Array(row + 1).fill(1)
            result[row] = arr
            for (let line = 0; line < arr.length; line++) {
                if (line === 0 || line === result[row].length -1) {
                    result[row][line] = 1
                } else {
                    result[row][line] = result[row - 1][line -1] + result[row - 1][line]
                }
            }
        }
    return result
};

双序列问题:juejin.cn/post/715279…

3.打家劫舍1/2/3

4.不同路径问题