数组中数字的组合总和等于n

时间:2016-01-13 15:45:13

标签: javascript combinatorics

示例:

var a = [1,2,3,4,5,6];

我想在数组中显示所有唯一的3个数字组合,其中这3个数字的总和等于9(或n)。

因此,这个例子的结果是:

[1,2,6]
[2,3,4]
[1,3,5]

我能找到的最近的东西是字符串的排列......

var alphabet = "abcde"; // shortened to save time

function permute(text) {
if(text.length === 3) { // if length is 3, combination is valid; alert
    console.log(text); // or alert
} else {
    var newalphabet = alphabet.split("").filter(function(v) {
        return text.indexOf(v) === -1;
    }); // construct a new alphabet of characters that are not used yet
        // because each letter may only occur once in each combination

    for(var i = 0; i < newalphabet.length; i++) {
        permute(text + newalphabet[i]); // call permute with current text + new
                                        // letter from filtered alphabet
    }
  }
}

permute("");

1 个答案:

答案 0 :(得分:0)

这可能是一种可能的解决方案。请注意,它不会处理唯一值,因此您需要添加其他逻辑。但是,如果数组已排序并具有唯一条目,则以下内容将产生理想结果。

var a = [1,2,3,4,5,6];

var result = [];

for (var i = 0; i < a.length-2; i++) {
  for (var j = i+1; j< a.length-1;j++) {
    for (var k = j+1; k < a.length;k++) {
      if(a[i]+a[j]+a[k] == 9) {
         result.push([a[i],a[j], a[k]]);
      } 
    }
  }
}

console.log(result);