一尘不染

Javascript,数组成员的所有可能和(最多4个)

algorithm

我无法弄清楚如何编写一个函数来计算数组元素的所有可能的和,每个加法最多4个元素。

给定

x = [1, 32, 921, 9213, 97, 23, 97, 81, 965, 82, 965, 823]

我需要从(1+32) ~ (965+823)转到(1+32+921+9213) ~ (965+82+965+823),计算所有可能的和。

输出应该是这样的数组:

{33:[1,32],922:[1,921],.... 2835:[965,82,965,823]}

由所有可能的总和填充。

这不是为了做作业,Travis J在下面解释了我要寻找的东西:这是关于排列的。谢谢大家,我希望这对其他人也有用。


阅读 297

收藏
2020-07-28

共1个答案

一尘不染

jsFiddle Demo

您可以使用置换子集递归算法来查找所有总和及其组合的集合。

var x = [1, 32, 921, 9213, 97, 23, 97, 81, 965, 82, 965, 823];

var sums = [];

var sets = [];

function SubSets(read, queued){

 if( read.length == 4 || (read.length <= 4 && queued.length == 0) ){

  if( read.length > 0 ){

   var total = read.reduce(function(a,b){return a+b;},0);

   if(sums.indexOf(total)==-1){

    sums.push(total);

    sets.push(read.slice().sort());

   }

  }

 }else{

  SubSets(read.concat(queued[0]),queued.slice(1));

  SubSets(read,queued.slice(1));

 }

}

SubSets([],x);

console.log(sums.sort(function(a,b){return a-b;}));

//log sums without sort to have them line up to sets or modify previous structure

console.log(sets);
2020-07-28