C++ 中硬幣找零 2


假設我們有不同面值的硬幣和一筆總金額。我們必須編寫一個模組來計算構成該金額的組合數。我們可以假設我們有每種硬幣無限多枚。因此,如果金額為 5,硬幣為 [1、2、5],則有四種組合。(1+1+1+1+1)、(1+1+1+2)、(1+2+2)、(5)

為了解決這個問題,我們將遵循以下步驟 −

  • 建立一個數組 dp,大小為金額 + 1
  • dp[0] := 1
  • n := 硬幣陣列的大小
  • 對於範圍從 0 到 n – 1 的 i
    • 對於範圍從硬幣[i] 到金額的 j
      • dp[j] := dp[j – 硬幣[i]]
  • 返回 dp[金額]

示例(C++)

讓我們看看以下實現以獲得更好的理解 −

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int change(int amount, vector<int>& coins) {
      vector <int> dp(amount + 1);
      dp[0] = 1;
      int n = coins.size();
      for(int i = 0; i < n; i++){
         for(int j = coins[i]; j <= amount; j++){
            dp[j] += dp[j - coins[i]];
         }
      }
      return dp[amount];
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,5};
   cout << (ob.change(5, v));
}

輸入

5
[1,2,5]

輸出

4

更新於:2020 年 4 月 29 日

420 次瀏覽

開啟您的職業生涯

完成本課程,獲得認證

開始學習
廣告