2011-01-01 2 views
1

Может ли кто-нибудь предложить простой способ получить все комбинации без повторов и с переменной длиной?комбинации с различной длиной и без повторения

[0,1,2,3,4]

(2-х): [0,1], [0,2], [0,3] ... [3,4]

(3-х): [0,1,2], [0,1,3] ... [2,3,4]

(4-х): [0,1,2,3 ], [0,1,2,4] ... [1,2,3,4]

+0

Звуки очень похожи на http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n – RandomEtc

+0

I просто нашел функцию/подпрограмму для решения проблемы, проблема аналогична, и похоже, что решение Адама Хьюза очень похоже. чтобы соответствовать этой проблеме, 'if (a.length> 1)' следует изменить на == 3 (или любую нужную длину. – Daniel

ответ

2

мне потребовалось некоторое время, но я думаю, что я получил его здесь ...

тыс это имеет все комбинации без повторов

var arr:Array = [0, 1, 2, 3, 4]; 
var $allcombos:Array = []; 
findCombos($allcombos,[],arr); 

function findCombos($root:Array, $base:Array, $rem:Array):void { 
    for (var i:int = 0; i < $rem.length; i++) { 
     var a:Array = $base.concat(); 
     a.push($rem[i]); 
     findCombos($root, a, $rem.slice(i + 1)); 
     if (a.length > 1) { 
      $root.push(a); 
     } 
    } 
}