1.爬楼梯问题
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.杨辉三角
分析:杨辉三角是动态规划二维解法的入门。首先杨辉三角的构成是:三角中边上的数字都是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…