我有一个包含以下项目的数组:
[[ 'NAME 1',30 ]
[ 'NAME 2',120 ],
[ 'NAME 3', 90 ],
[ 'NAME 4',30 ]]
例如,我需要将此数组中的和作为60,因此在数组中它是第一个和最后一个元素。
我怎么能在node.js中做到这一点?
总结:我有一个数组,从数组我需要取x作为总和值(x是数字,如90,100)。如果数组中已存在目标编号,则表示该编号。如果它不存在,则应返回数字组合,组合中的数字应尽可能少。
答案 0 :(得分:1)
感谢@ rbarilani关于Finding all possible combinations of numbers to reach a given sum中SubsetSum问题的代码,以下是调整后的程序:
var originArr = [[ 'NAME 1',30 ], [ 'NAME 2',120 ], [ 'NAME 3', 90 ], [ 'NAME 4',30 ]];
var arr = [];
for (var i in originArr) {
arr.push(originArr[i][1]);
}
var candidate;
subsetSum(arr, 60);
console.log(candidate ? candidate : 'No combination found');
function subsetSum(numbers, target, partial) {
var s, n, remaining;
partial = partial || [];
// sum partial
s = partial.reduce(function (a, b) {
return a + b;
}, 0);
// check if the partial sum is equals to target
if (s === target) {
if (!candidate || candidate.length > partial.length) {
candidate = partial;
}
}
if (s >= target) {
return; // if we reach the number why bother to continue
}
for (var i = 0; i < numbers.length; i++) {
n = numbers[i];
remaining = numbers.slice(i + 1);
subsetSum(remaining, target, partial.concat([n]));
}
}
&#13;