322.零錢對換
- 零錢兌換
難度中等589
給定不同面額的硬幣 coins 和一個總金額
amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。示例 1:
輸入: coins = [1, 2, 5], amount = 11 輸出: 3 解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3 輸出: -1
時間複雜度O(nK)
public int coinChange(int[] coins, int amount) {
int[] dp = new int[amount+1];
for(int i=0; i<amount+1; i++) {
dp[i] = i == 0 ? 0 : amount+1;
for(int coin : coins) {
if(i >= coin) {
dp[i] = Math.min(dp[i-coin] + 1, dp[i]);
}
}
}
return dp[amount] == amount+1 ? -1 : dp[amount];
}