从多重数组中找到所有可能的数字组合以达到给定的总和

时间:2020-09-15 13:20:15

标签: algorithm search combinations subset-sum

您将如何测试一组给定的N,R,S个数字的所有可能组合,以使它们加起来成为给定的最终数字,而您只能从每个集合中使用1个数字?

一个简单的例子:

要添加的数字集:

N = {1,2,3,...}
R = {4,5,6,...}
S = {7,8,9,...}

所需结果:所有加X的数字,因此当 X = 12 时,输出为

[1,4,7]

1 个答案:

答案 0 :(得分:0)

使用JavaScript:

var N=[1,2,3];
var R=[4,5,6];
var S=[7,8,9];

function xInNRS(x) {
  return N.forEach(n=>R.forEach(r=>S.forEach(s=>{if(n+r+s==x) console.log([n,r,s])})));
}

console.log(12);xInNRS(12);
console.log(13);xInNRS(13);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您还可以存储所有内容,然后测试x或打印x:

var N=[1,2,3];
var R=[4,5,6];
var S=[7,8,9];

var X={};

N.forEach(n=>R.forEach(r=>S.forEach(s=>{
  var sum=n+r+s;
  if(X[sum]==undefined) X[sum]=[];
  X[sum].push([n,r,s]);
})));

console.log("All Xs");
console.log(X);

console.log("Test x");
console.log(9,X[9]!=undefined);
console.log(16,X[16]!=undefined);

console.log("Combinations for x");
console.log(9,X[9]);
console.log(12,X[12]);
console.log(13,X[13]);
.as-console-wrapper { max-height: 100% !important; top: 0; }