不是贪心刷不起,而是动态规划更有性价比
动态规划五步曲
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 举例推导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]
};