换钱币这道题我一开始用回溯法解题,导致超时,后看到提示,改用动态规划解
这个是动态规划写的答案
public class Solution {
int min = -1;
public int coinChange(int[] coins, int amount) {
if(amount == 0)
return 0;
int key = amount;
int[] money = new int[amount+1];
Arrays.fill(money,-1);
Arrays.sort(coins);
for(int i = 0;i < coins.length;i++){
if(coins[i] > amount)
break;
money[coins[i]]=1;
}
int coin = coins[0];
while(coin <= amount){
if(money[coin] == -1){
int min = Integer.MAX_VALUE;
int check = 0;
for(int j = 0;j < coins.length;j++){
if(coin - coins[j] <= 0)
break;
if(money[coin - coins[j]] != -1&&money[coin - coins[j]]+1 < min){
min = money[coin - coins[j]]+1;
check = 1;
}
}
if(check == 1){
money[coin] = min;
//System.out.println(min);
}
}
coin++;
}
return money[amount];
}
}
2017/3/17