在 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 次查看

开启您的 职业生涯

完成课程以获得认证

开始学习
广告