上篇博客提到用
动态规划求解斐波那契数列
// 动态规划的四个步骤
public int fib(int n) {
if (n <= 1) return n;
// 1. 定义状态数组,dp[i] 表示的是数字 i 的斐波那契数
int[] dp = new int[n + 1];
// 2. 状态初始化
dp[0] = 0;
dp[1] = 1;
// 3. 状态转移
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
// 4. 返回最终需要的状态值
return dp[n];
}
下面整合LeetCode相关系统训练:
回溯算法思想
- leetcode 112 号算法题:路径总和
- leetcode 113 号算法题:路径总和 II
- leetcode 46 号算法题:全排列
- leetcode 47 号算法题:全排列 II
- leetcode 77 号算法题:组合
- leetcode 39 号算法题:组合总和
- leetcode 40 号算法题:组合总和 Ⅱ
- leetcode 216 号算法题:组合总和 Ⅲ
- leetcode 78 号算法题:子集
- leetcode 90 号算法题:子集Ⅱ
- leetcode 17 号算法题:电话号码的字母组合
- leetcode 93 号算法题:复原 IP 地址
- leetcode 22 号算法题:括号生成
- leetcode 51 号算法题:N 皇后
- leetcode 37 号算法题:数独问题
贪心算法思想
- leetcode 455 号算法题:分发饼干
- leetcode 322 号算法题:零钱兑换
- leetcode 45 号算法题:跳跃游戏 Ⅱ
- leetcode 1578 号算法题:避免重复字母的最小删除成本
- leetcode 402 号算法题:移掉K位数字
动态规划算法思想
- leetcode 509 号算法题:斐波那契数
- leetcode 322 号算法题:零钱兑换
- leetcode 64 号算法题:最小路径和
- leetcode 53 号算法题:最大子数组之和
- leetcode 647 号算法题:回文子串
- leetcode 5 号算法题:最长回文串
- leetcode 131 号算法题:分割回文串
- leetcode 516 号算法题:最长回文子序列
- leetcode 300 号算法题:最长上升子序列
- leetcode 1143 号算法题:最长公共子序列
- leetcode 72 号算法题:编辑距离
- leetcode 44 号算法题:通配符匹配
- leetcode 10 号算法题:正则表达式匹配
- leetcode 486 号算法题:预测赢家
- leetcode 877 号算法题:石子游戏
- 0-1 背包问题