- 1. 斐波那契饿数列
- 2. 最长有效括号 32
- 3. 跳跃游戏1 55
- 4. 跳跃游戏2 45
- 5. 最大子数组和 53
- 6. 不同路径 62
- 7. 不同路径2 63
- 8. 最小路径和 64
- 9. 爬楼梯 70
- 10. 编辑距离 72
- 11. 最小覆盖子串 76
- 三角形最小路径和">12. 三角形最小路径和
- 买卖股票的最佳时机">13. 买卖股票的最佳时机
- 买卖股票的最佳时机 II">14. 买卖股票的最佳时机 II
- 买卖股票的最佳时机 III">15. 买卖股票的最佳时机 III
- 乘积最大子数组">16. 乘积最大子数组
- 买卖股票的最佳时机 IV">17. 买卖股票的最佳时机 IV
- 打家劫舍">18. 打家劫舍
- 打家劫舍 II">19. 打家劫舍 II
- 最大正方形">20. 最大正方形
- 完全平方数">21. 完全平方数
- 最佳买卖股票时机含冷冻期">22. 最佳买卖股票时机含冷冻期
- 戳气球">23. 戳气球
- 零钱兑换">24. 零钱兑换
- 矩形区域不超过 K 的最大数值和">25. 矩形区域不超过 K 的最大数值和
- 青蛙过河">26. 青蛙过河
- 分割数组的最大值">27. 分割数组的最大值
- 零钱兑换 II">28. 零钱兑换 II
- 学生出勤记录 II">29. 学生出勤记录 II
- 任务调度器">30. 任务调度器
- 回文子串">31. 回文子串
- 买卖股票的最佳时机含手续费">32. 买卖股票的最佳时机含手续费
- 不同路径 III">33. 不同路径 III
- 最长公共子序列">34. 最长公共子序列
- 路径的数目">35. 路径的数目
- 36. 解码方法 91
Divide & Conquer + Optimal substructure 分治 + 最有子结构
1. 斐波那契饿数列
递归 指数 O(2^n)
public int fib(int n) {if (n <= 1) {return n;}return fib(n-1) + fib(n-2);}
缓存
public int fib(int n, int[] memo) {if (n <= 1) {return n;}if (memo[n] == 0){memo[n] = fib(n-1) + fib(n-2);}return memo[n];}
循环
public int fib(int n) {if (n <= 3) {return n;}int a = 1, b = 2, c = 3;for (int i = 0; i < n - 3; i++) {a = b;b = c;c = a + b;}return c;}
2. 最长有效括号 32
3. 跳跃游戏1 55
4. 跳跃游戏2 45
5. 最大子数组和 53
6. 不同路径 62
7. 不同路径2 63
8. 最小路径和 64
9. 爬楼梯 70
10. 编辑距离 72
11. 最小覆盖子串 76
12. 三角形最小路径和
13. 买卖股票的最佳时机
14. 买卖股票的最佳时机 II
15. 买卖股票的最佳时机 III
16. 乘积最大子数组
17. 买卖股票的最佳时机 IV
18. 打家劫舍
19. 打家劫舍 II
20. 最大正方形
21. 完全平方数
22. 最佳买卖股票时机含冷冻期
23. 戳气球
24. 零钱兑换
25. 矩形区域不超过 K 的最大数值和
26. 青蛙过河
27. 分割数组的最大值
28. 零钱兑换 II
29. 学生出勤记录 II
30. 任务调度器
31. 回文子串
32. 买卖股票的最佳时机含手续费
33. 不同路径 III
34. 最长公共子序列
35. 路径的数目

