322. 零錢兌換

給定不同面額的硬幣 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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章