Проблема: Вам выдаются монеты разных номиналов и общая сумма денег. Напишите функцию, чтобы вычислить наименьшее количество монет, которое вам нужно, чтобы составить эту сумму. Если эта сумма денег не может быть составлена какой-либо комбинацией монет, верните -1.
Пример 1:
Ввод: монеты = [1, 2, 5], сумма = 11
Выход: 3
Пояснение: 11 = 5 + 5 + 1
Пример 2:
Ввод: монеты = 2 , сумма = 3
Выход: -1
You may assume that you have an infinite number of each kind of coin.
Мой код:
public int coinChange(int[] coins, int amount) {
Arrays.sort(coins);
int new_amount=amount;
int count_coin=0;
int q=0,r=0,a=0;
int k=coins.length-1;
while(amount>0 && k>=0) {
q = new_amount / coins[k];
count_coin = count_coin + q;
r = new_amount % coins[k];
new_amount=r;
a+=q*coins[k];
k--;
}
if(a==amount){
return count_coin;
}
else{
return -1;
} }
Мой код хорошо работает для приведенных двух примеров. После работы с этим примером я взял еще один контрольный пример.
Пример 3: вход: монеты = [186,419,83,408], сумма = 6249
Выход: 20
Мой вывод: -1
Я не понимаю этого примера. Если у кого-то есть идеи по поводу этого примера или любого другого лучшего алгоритма, кроме моего, поделитесь им со мной.
Я вижу Смена монеты (динамическое программирование) ссылка. Но не могу понять.
Я также изучал Почему алгоритм жадных монет не работает для некоторых наборов монет?
но не могу понять, что он пытается сказать. Итак, я поднял этот вопрос.
Заранее спасибо.