文章目录
- 1. 贪心算法:只看当前
- 1.1 零钱兑换问题:力扣322
- 2. 活动选择问题
- 3. 动态规划
- 3.1 不同路径:
- 3.2 0-1背包问题
- 3.3 完全背包问题
- 3.4 零钱兑换-动态规划
- 4. 最长公共字串--动态规划
- 5. 最长公共子序列
- 6. 最长递增子序列
- 7. 打家劫舍
- 8. 全排列--回溯
1. 贪心算法:只看当前
1.1 零钱兑换问题:力扣322
用贪心算法:但有可能得到错误的解
public class Leetcode322 {public int coinChange(int[] coins, int amount) {int remainder = amount;int count = 0;for (int coin : coins) {while (remainder - coin > 0) {remainder -= coin;count++;}if (remainder - coin == 0) {remainder = 0;count++;break;}}if (remainder > 0) {return -1;} else {return count;}}public static void main(String[] args) {Leetcode322 leetcode = new Leetcode322();int count = leetcode.coinChange(new int[]{5, 2, 1}, 5);
// int count = leetcode.coinChange(new int[]{25, 10, 5, 1}, 41);
// int count = leetcode.coinChange(new int[]{2}, 3);// 问题1 没有回头,导致找到更差的解
// int count = leetcode.coinChange(new int[]{15, 10, 1}, 21); // 问题2 没有回头,导致无解
// int count = leetcode.coinChange(new int[]{15, 10}, 20); System.out.println(count);}
}
2. 活动选择问题
贪心选择:每次选择最早结束的活动
3. 动态规划
3.1 不同路径:
3.2 0-1背包问题
3.3 完全背包问题
3.4 零钱兑换-动态规划
零钱兑换变种:
4. 最长公共字串–动态规划
5. 最长公共子序列
6. 最长递增子序列
7. 打家劫舍
8. 全排列–回溯