2014-03-27 50 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