大纲
● 理论基础
● 509. 斐波那契数
● 70. 爬楼梯
● 746. 使用最小花费爬楼梯
509. 斐波那契数
题目:509. 斐波那契数
// 斐波那契数列
// 动规 5部曲
// 1 dp[i]代表i处的斐波那契值
// 2 递归公式:dp[0] = 0, dp[1]=1, dp[i]=dp[i-1]+dp[i-2]
// 3 dp数组初始化 dp[0]=0,dp[i]=1
// 4 遍历顺序 从前向后
// 5 举例子推导
int fbi(int n) {if (n < 2) return n;int dp[2] = {0};dp[0] = 0;dp[1] = 1;for (int i = 2; i < n; i++) {int tmp = dp[1];dp[1] = dp[0] + dp[1];dp[0] = tmp;}return dp[1];
}
70. 爬楼梯
题目:70. 爬楼梯
// 爬楼梯
// 递归5部曲
// dp[i] 代表爬到i的方式总数
// 公式:dp[i]=dp[i-1]+dp[i-2]
// dp数组初始化 dp[0]=1 dp[1]=2
// 遍历顺序从前向后
// 举例子
int stepFloor(int n) {if (n < 2) return n;int dp[2] = {0};dp[0] = 1;dp[1] = 2;for (int i = 2; i < n; ++i) {int tmp = dp[1];dp[1] = dp[0] + dp[1];dp[0] = tmp;}return dp[1];
}
746. 使用最小花费爬楼梯
题目:746. 使用最小花费爬楼梯
// 爬楼梯的最少次数
// 给定一个数组,求抵达末尾的最少代价,其中i处代表到i的代价
// 动态规划
// 1 dp[i] 代表到达i处的最少代价
// 2 公式 dp[i] = min(dp[i-1]+nums[i-1], dp[i-2]+nums[i-2])
// 3 初始化 dp[0] = 0 dp[1]=0
// 4 遍历顺序 前-》后
// 5 [10,15,20]
int minStepSpend(vector<int>& nums) {if (nums.size() < 2) return 0;int dp0 = 0, dp1 = 0;for (int i = 2; i < nums.size(); ++i) {int tmp = dp1;dp1 = min(dp0 + nums[i-2], dp1 + nums[i-1]);dp0 = tmp;}return dp1;
}