在 JavaScript 中用最少的硬幣數求和


問題

我們需要編寫一個 JavaScript 函式,其中,arr, arr 作為第一個引數。此陣列基本上指定我們擁有的不同型別的硬幣面值。

此函式的第二個引數是一個數字,amount,指定我們要加到一起的數額。我們的函式應該只返回將這個數額加起來所需的最低硬幣數。

如果我們無法達到 amount,則應該返回 -1。

例如,如果函式的輸入為 −

const arr = [1, 2, 5];
const amount = 17;

則輸出應為 −

const output = 4;

輸出說明

因為可以使用 3 個 5 的硬幣和 1 個 2 的硬幣得到這個金額。

示例

程式碼為 −

const arr = [1, 2, 5];
const amount = 17;
const minCoins = (arr = [], amount = 1) => {
   const changes = [];
   changes[0] = 0;
   while(changes.length <= amount){
      let change = Math.pow(2, 31) - 1;
      for (let i = 0; i < arr.length; i++) {
         if (changes.length - arr[i] < 0){
            continue;
         };
         change = Math.min(change, 1 + changes[changes.length - arr[i]]);
      };
      changes.push(change);
   };
   return changes[amount] == Math.pow(2, 31) - 1 ? -1 : changes[amount];
};
console.log(minCoins(arr, amount));

輸出

控制檯中的輸出為 −

4

更新日期:20-3-2021

129 次檢視

開啟您的 職業生涯

完成課程以獲得認證

開始學習
廣告
© . All rights reserved.