问题描述:
通常是提供可选择的一堆数据以最少的数量的去拼凑一个整数,另外类似于0-1背包,给一对物品,选取最大的价值,也可以是最少的数量,填满背包。
问题变种在于,是否可以重复选取, 是否存在刚好就可以拼凑的数量,需要在进行动态规划时添加的辅助筛选条件。
解决方案:
1、初始化目标钱数的大小数组作为动态规划的迭代数据,根据是否有无答案,选择初始条件,一般可以统一初始化喂Integer的最大值;
2、对不同的钱数进行遍历,获取当前的钱数最优的组合;
2.1 循环里面的加个判断只选取小于当前钱数的面额;
2.2 比较当前选取的数量和之前迭代哪个少;
3、结束,如果拼凑成功则返回,否则-1;
public int coinChange(int[] coins, int amount) {
int max = amount + 1;
int[] dp = new int[amount + 1];
Arrays.fill(dp, max);
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int j = 0; j < coins.length; j++) {
if (coins[j] <= i