学习目标:
● 理论基础
● 509. 斐波那契数
● 70. 爬楼梯
● 746. 使用最小花费爬楼梯
学习内容:● 理论基础
https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
视频:https://www.bilibili.com/video/BV13Q4y197Wg
动态规划五部曲:
1.确定dp数组(dp table)以及下标的含义
2.确定递推公式
3.dp数组如何初始化
4.确定遍历顺序
5.举例推导dp数组
学习内容:509. 斐波那契数
https://programmercarl.com/0509.%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.html
视频:https://www.bilibili.com/video/BV1f5411K7mo
var fib = function(n) {
let dp0 = 0;
let dp1 = 1;
let tmp=0
if(n==0) return dp0;
if(n==1)return dp1
for(let i=2;i<=n;i++){
tmp=dp0+dp1;
dp0=dp1;
dp1=tmp
}
return tmp
};
学习内容:● 70. 爬楼梯
https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF.html
视频:https://www.bilibili.com/video/BV17h411h7UH
var climbStairs = function(n) {
let dp1 = 1
let dp2 = 2
if(n==1)return dp1
if(n==2)return dp2
let tmp=0
for(let i=3;i<=n;i++){
tmp = dp1+dp2
dp1=dp2
dp2=tmp
}
return tmp
};
学习内容:● 746. 使用最小花费爬楼梯
https://programmercarl.com/0746.%E4%BD%BF%E7%94%A8%E6%9C%80%E5%B0%8F%E8%8A%B1%E8%B4%B9%E7%88%AC%E6%A5%BC%E6%A2%AF.html
视频讲解:https://www.bilibili.com/video/BV16G411c7yZ
!!!!!dp[i]的定义:到达第i台阶所花费的最少体力为dp[i]。
dp数组如何初始化:根据题意let dp=[0,0]
遍历顺序:从前往后
for循环遍历:i<=cost.length 第一次写成i<cost.length.他是爬到楼梯顶部,所以需要在多跳一次
var minCostClimbingStairs = function(cost) {
let dp=[0,0]
for(let i=2;i<=cost.length;i++){
//递推公式
dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
}
return dp[dp.length-1]
};