給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函數來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
說明:
你可以認爲每種硬幣的數量是無限的。
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int INF = amount + 1;
vector<int> dp(amount+1, INF);
dp[0] = 0;
for(int i=0;i<coins.size();i++){
for(int j=coins[i];j<amount+1;j++){
dp[j]=min(dp[j],dp[j-coins[i]]+1);//狀態轉移方程
}
}
return dp[amount]<INF?dp[amount]:-1;
}
};