Day 38 动态规划 part01
今日任务
代码实现
- 斐波那契数
public int fib(int n) {
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
public int fib2(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 + 1; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n + 1];
}
- 爬楼梯
除了边界值设定,与上一道题基本一样,代码省略
- 使用最小花费爬楼梯
有点小难,不过还是能想到
public int minCostClimbingStairs(int[] cost) {
int[] dp = new int[cost.length + 1];
dp[0] = 0;
dp[1] = 0;
for (int i = 2; i < cost.length + 1; i++) {
dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[cost.length];
}
public int minCostClimbingStairs(int[] cost) {
int a = 0;
int b = 0;
for (int i = 2; i < cost.length + 1; i++) {
int sum = Math.min(b + cost[i - 1], a + cost[i - 2]);
a = b;
b = sum;
}
return b;
}
今日总结
- 第一天动态规划,比较简单,给我自信
- 现在的股票越来越看不懂,各路大佬看得也不一样,一天看中好几个,有的涨了有的跌了,有点难玩