零钱兑换
2020-09-16 本文已影响0人
windUtterance
题目描述:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
示例:
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
Java代码:
class Solution {
int res = Integer.MAX_VALUE;
public int coinChange(int[] coins, int amount){
if(amount==0) return 0;
Arrays.sort(coins);
mincoin(coins,amount,coins.length-1,0);
return res==Integer.MAX_VALUE? -1:res;
}
private void mincoin(int[] coins,int amount, int index, int count){
if(amount==0){
res = Math.min(res,count);
return;
}
if(index<0){
return;
}
for(int i = amount/coins[index];i>=0 && i+count<res; i--){
mincoin(coins,amount - (i*coins[index]), index-1, count+i);
}
}
}