2016-01-13 90 views
-3

實施例:組合誰總和等於n

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(""); 
+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);