2014-03-27 36 views
0

說我有和數組:數組不重複的所有可能的組合?

var arr = [1,2,3,4]; 

我將如何去獲得所有可能的組合,而無需重複?

例如:你想要什麼

// "2,1" wouldn't be valid because it's essentially "1,2" 

1 
1,2 
1,2,3 
1,2,3,4 
2 
2,3 
2,3,4 
3 
3,4 
4 
+5

嘗試一些嵌套的循環,並回來與你有什麼。看到一個解決的解決方案不會幫助你學到很多東西。 – MatthewMartin

+0

這不是集合論意義上的「組合」(或排列),您正在根據您的示例輸出查找所有可能的子集。 (和上面的問題一樣,你有什麼嘗試?) – DrLivingston

+1

@DrLivingston:示例輸出實際上是子序列,而不是子集。 – Bergi

回答

1

並非所有可能的組合(subsets,失蹤是1,31,42,4),但所有subsequences。您可以通過使用該序列的開始和結束兩個嵌套的循環讓那些容易:

function subsequences(arr) { 
    var res = [[]]; 
    for (var i=0; i<arr.length; i++) 
     for (var j=i+1; j<=arr.length; j++) 
      res.push(arr.slice(i, j)); 
    return res; 
} 

對於所有可能的子集 - 的power set - 看this answer

+0

感謝您的解決方案,更重要的是參考/學習材料! – JasonPolito