2017-11-16 8 views
0

배열의 모든 가능한 순열을 생성하는 방법에 대한 몇 가지 유사한 질문을 보았습니다.단일 배열에서 요소의 모든 순열 생성

는 (N 요소와) 다음과 같은 배열 시작 :

var array = ["apple", "banana", "lemon", "mango"]; 
하지만 각 순열에 포함되지 않은 출력 값이됩니다 알고리즘을 작성하는 방법을 알아내는 매우 힘든 시간을 보내고있어

그리고 다음과 같은 결과가 점점 :

var result = [ 
    "apple not banana not lemon not mango" 
    "apple banana not lemon not mango" 
    "apple banana lemon not mango" 
    "apple banana lemon mango" 
    "banana not apple not lemon not mango" 
    ... 
]; 
+1

당신은 당신이 뭘 하려는지 더 이상 설명 할 수 있습니까? 지금은 여전히 ​​불분명하다. – yuantonito

+5

[PHP : 1D 배열의 모든 가능한 조합을 얻는 방법?] (https://stackoverflow.com/questions/10834393/php-how-to-get-all-possible-combinations-of-1d-array)) – DaFois

+0

각 조합에 포함되지 않은 값을 표시하고 싶습니다. – earpolicy

답변

0

이 단순한 접근 방식은 비트 마스크를 사용하기 때문에 그것은 단지 단어의 상대적으로 적은 수에 대한 작동합니다.

var array = ["apple", "banana", "lemon", "mango"]; 
 

 
var result = []; 
 
for (var n = 0; n < 1 << array.length; n++) { 
 
\t var i, a = []; 
 
\t for (i = 0; i < array.length; i++) if ((n & (1 << i)) == 0) a.push(array[i]); 
 
\t for (i = 0; i < array.length; i++) if ((n & (1 << i)) != 0) a.push("not " + array[i]); 
 
\t result.push(a.join(" ")); 
 
} 
 

 
console.dir(result.join("\n"));