问题描述
我正在尝试解决硬币找零问题,在这种情况下,您将使用尽可能少的硬币来赚钱。我正在尝试使用贪婪方法-我的算法对硬币数组进行排序,从最大的硬币开始,并尽可能多地使用它,然后再移动下一个将剩余部分划分的硬币。
这适用于初始测试用例:
硬币= [1,2,5],金额= 11
但这次失败了:
硬币= [186,419,83,408],金额= 6249
我不确定为什么它会失败,我仍在尝试掌握贪婪的方法。非常感谢您的反馈!
class Solution {
public int coinChange(int[] coins,int amount) {
int count = 0;
if(coins.length == 1 && amount % coins[0] != 0) {
return -1;
}
Arrays.sort(coins);
int i = coins.length - 1;
while(amount >= 0 && i >= 0) {
if(coins[i] <= amount) {
int remainder = amount / coins[i];
count = count + remainder;
amount -= (remainder * coins[i]);
}
i--;
}
return count;
}
}
解决方法
在一般情况下(任意硬币值),贪婪地解决硬币找零问题的方法不起作用。
示例:Coins = [2,3,6,7]
和Amount = 12
,
贪婪需要[2,7]
,最佳选择是[6,6]
。
您需要使用动态编程方法来获得最佳值。