题目:322. 零钱兑换
题目链接:链接
难度:中等
参考代码:
class Solution {
public int coinChange(int[] coins, int amount) {
Arrays.sort(coins);
int[] dp = new int[amount + 1];
// 最大cost
int maxCost = amount / coins[0] + 1;
Arrays.fill(dp, maxCost);
// amount为0时,需要凑0个硬币
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
int cost = maxCost;
for (int j = 0; j < coins.length; j++) {
if (i >= coins[j]) {
cost = Math.min(cost, 1 + dp[i - coins[j]]);
}
}
dp[i] = cost;
}
return dp[amount] == maxCost ? -1 : dp[amount];
}
}