在 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
广告