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

标签 javascript 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 在那里解释了我要找的东西:它是关于排列的。 谢谢大家,我希望这对其他人也有用。

最佳答案

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);

关于Javascript,数组成员的所有可能总和(最多 4 个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557888/

相关文章:

javascript - 检测 JavaScript 警告

algorithm - 在二维坐标系下实现霍夫变换直线检测

arrays - 计数未排序数组中出现的正值,负值和0值的最佳方法是什么?

algorithm - 快速排序,其中数组中的第一个元素较小

C++ 位运算 : How to decode/decompress char to int, 并显示正确的字符串?

algorithm - 插入排序中比较的确切数量

javascript - 通过 jquery 或 javascript 隐藏内容会影响 SEO 吗?

javascript - '-$1'在javascript中是什么意思?

javascript - 选择下拉菜单输入多个选择。 JavaScript

javascript - 如何询问用户是否希望在 CloudKit JS 中被发现?