前言
动态规划五部曲
1,确定dq数组及其下标含义
2, 确定递推公式
3, dq数组如何初始化
4, 确定遍历顺序
5, 举例推导dq数组
提示:以下是本篇文章正文内容,下面案例可供参考
一、力扣509. 斐波那契数
递归
class Solution {
public int fib(int n) {
if(n == 0){
return 0;
}
if(n == 1){
return 1;
}
return fib(n-1) + fib(n-2);
}
}
动态规划
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 i = 2; i <= n; i ++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
}
二、力扣70. 爬楼梯
class Solution {
public int climbStairs(int n) {
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
int[] dp = new int[n+1];
dp[1] = 1;
dp[2] = 2;
for(int i = 3 ; i <= n; i ++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
}
三、746. 使用最小花费爬楼梯
class Solution {
public int minCostClimbingStairs(int[] cost) {
int[] dp = new int[cost.length + 1];
dp[0] = 0;
dp[1] = 0;
for(int i = 2; i < dp.length; i ++){
dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
}
return dp[dp.length-1];
}
}