gpt4 book ai didi

javascript - 在数组中找到可以总和为目标值的可能数字

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:36 26 4
gpt4 key购买 nike

假设我有一个数字数组,例如 [14,6,10] - 我如何才能找到可以加起来达到给定目标值的可能组合/对。

例如我有[14,6,10],我正在寻找40的目标值我的预期输出将是

 10 + 10 + 6 + 14
14 + 14 + 6 + 6
10 + 10 + 10 + 10

*顺序不重要

话虽这么说,这是我到目前为止尝试过的:

function Sum(numbers, target, partial) {
var s, n, remaining;

partial = partial || [];

s = partial.reduce(function (a, b) {
return a + b;
}, 0);

if (s === target) {
console.log("%s", partial.join("+"))
}


for (var i = 0; i < numbers.length; i++) {
n = numbers[i];
remaining = numbers.slice(i + 1);
Sum(remaining, target, partial.concat([n]));
}
}

>>> Sum([14,6,10],40);
// returns nothing

>>> Sum([14,6,10],24);
// return 14+10

它实际上是无用的,因为它只会在数字只能用于求和一次时返回。

那么怎么做呢?

最佳答案

只要总和小于想要的总和,您就可以添加实际索引的值,或者继续下一个索引。

function getSum(array, sum) {
function iter(index, temp) {
var s = temp.reduce((a, b) => a + b, 0);
if (s === sum) result.push(temp);
if (s >= sum || index >= array.length) return;
iter(index, temp.concat(array[index]));
iter(index + 1, temp);
}

var result = [];
iter(0, []);
return result;
}

console.log(getSum([14, 6, 10], 40));
.as-console-wrapper { max-height: 100% !important; top: 0; }

为了获得有限的结果集,您可以指定长度并在退出条件中检查它。

function getSum(array, sum, limit) {
function iter(index, temp) {
var s = temp.reduce((a, b) => a + b, 0);
if (s === sum) result.push(temp);
if (s >= sum || index >= array.length || temp.length >= limit) return;
iter(index, temp.concat(array[index]));
iter(index + 1, temp);
}

var result = [];
iter(0, []);
return result;
}

console.log(getSum([14, 6, 10], 40, 5));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在数组中找到可以总和为目标值的可能数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54605306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com