class Solution {
public int coinChange(int[] coins, int amount) {
return coinChange(coins,amount,new int[amount - 1]);
}
public int coinChange(int[] coins,int amount,int[] count){
if(amount < 0) return -1;
if(amount == 0) return 0;
if(count[amount - 1] != 0) return count[amount - 1];
int min = Integer.MAX_VALUE;
for(int coin:coins){
int res = coinChange(coins,amount - coin,count);
if(res >= 0 && res < min){
min = res + 1;
}
}
count[amount.length - 1] = (min == Integer.MAX_VALUE)?-1:min;
return count[amount.length - 1];
}
/*
使用贪婪的计算方法无法算出来,存在一种情况,不能选择最大的,选择次之的数进行计算
*/
public int greedySolution(int[] coins,int amount){
Arrays.sort(coins);
int res = 0;
while(amount > 0){
for(int i=coins.length - 1;i>=0;i--){
if(amount >= coins[i]){
amount -= coins[i];
res++;
break;
}
}
if(amount != 0 && amount < coins[0]){
return -1;
}
}
return res;
}
}