文章目录
- [1. 贪心算法:只看当前](#1. 贪心算法:只看当前)
-
- [1.1 零钱兑换问题:力扣322](#1.1 零钱兑换问题:力扣322)
- [2. 活动选择问题](#2. 活动选择问题)
- [3. 动态规划](#3. 动态规划)
-
- [3.1 不同路径:](#3.1 不同路径:)
- [3.2 0-1背包问题](#3.2 0-1背包问题)
- [3.3 完全背包问题](#3.3 完全背包问题)
- [3.4 零钱兑换-动态规划](#3.4 零钱兑换-动态规划)
- [4. 最长公共字串--动态规划](#4. 最长公共字串--动态规划)
- [5. 最长公共子序列](#5. 最长公共子序列)
- [6. 最长递增子序列](#6. 最长递增子序列)
- [7. 打家劫舍](#7. 打家劫舍)
- [8. 全排列--回溯](#8. 全排列--回溯)
1. 贪心算法:只看当前
1.1 零钱兑换问题:力扣322
用贪心算法:但有可能得到错误的解
java
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. 全排列--回溯