目录
理论基础
文章讲解:代码随想录
视频讲解:从此再也不怕动态规划了,动态规划解题方法论大曝光 !| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili
LeetCode 509.斐波那契数
文章讲解:代码随想录
视频讲解:手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili
力扣题目:LeetCode 509.斐波那契数
注意事项
斐波那契数是从0开始的,数组下标也是从0开始的,如果我们建立数组,那么数组的空间一定是n+1。
动态规划五步曲:
1.确定dp[i]的含义
dp[i]表示第i个斐波那契数
2.找出递推公式
dp[i] = dp[i-1] + dp[i - 2]
3.初始化dp数组
dp[0] = 0
dp[1] = 1
4.确定遍历顺序
从前往后遍历
5.举例dp数组(用作检验自己的想法)
代码如下(Java):未压缩版
class Solution {
public int fib(int n) {
if(n <= 1) return n;
int[] dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;
for(int index = 2; index <= n; index++){
dp[index] = dp[index-1] + dp[index-2];
}
return dp[n];
}
}
代码如下(Java):压缩版
class Solution {
public int fib(int n) {
if(n < 2) return n;
int first = 0;
int second = 1;
int result = 0;
for(int index = 2; index <= n; index++){
result = first + second;
first = second;
second = result;
}
return result;
}
}
LeetCode 70.爬楼梯
文章讲解:代码随想录
视频讲解:带你学透动态规划-爬楼梯(对应力扣70.爬楼梯)| 动态规划经典入门题目_哔哩哔哩_bilibili
力扣题目:LeetCode 70.爬楼梯
动态规划五步曲
1.确定dp[i]的含义
dp[i]:达到第i阶有多少种方法
2.找出递推公式
dp[i] = dp[i-1] + dp[i-2]
3.初始化dp数组
dp[1] = 1;
dp[2] = 2;
4.确定遍历方式
从前往后
5.举例dp数组(用作检验自己的想法)
代码如下(Java):
class Solution {
public int climbStairs(int n) {
if(n == 1) return 1;
else if(n == 2) return 2;
int dp[] = new int[n+1];
dp[1] = 1;
dp[2] = 2;
for(int index = 3; index <= n; index++){
dp[index] = dp[index-1] + dp[index-2];
}
return dp[n];
}
}
LeetCode 746.使用最小花费爬楼梯
文章讲解:代码随想录
视频讲解:动态规划开更了!| LeetCode:746. 使用最小花费爬楼梯_哔哩哔哩_bilibili
力扣题目:力扣
动态规划五步曲
1.确定dp[i]的含义
dp[i]:达到第i位置所需要的最小体力花费
2.找出递推公式
dp[i] = min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2]);
3.初始化dp数组
dp[0] = 0;
dp[1] = 0;
4.确定遍历方式
从前往后
5.举例dp数组(用作检验自己的想法)
代码如下(Java):
class Solution {
public int minCostClimbingStairs(int[] cost) {
int len = cost.length;
int[] dp = new int[len + 1];
dp[0] = 0;
dp[1] = 0;
for(int i = 2; i <= len; i++){
dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
}
return dp[len];
}
}