2014-09-15 5 views
2

가능한 모든 문자 조합을 계산하는 JavaScript를 작성하려고합니다.가능한 모든 문자 조합을 계산하십시오.

지금까지이 작업을했습니다 :

var input = window.prompt("What to calculate?", ""); 
    var letters = input; 
    var combi = []; 
    var temp = ""; 
    var letLen = Math.pow(2, letters.length); 
    for (var i = 0; i < letLen; i++){ 
     temp = ""; 
     for (var j = 0; j < letters.length; j++){ 
      if ((i & Math.pow(2, j))){ 
       temp += letters[j]; 
      } 
      if (temp !==""){ 
       combi.push(temp); 
      } 
     } 
    document.write(combi.join(" ")); 
    alert(combi.length); 

결과는 다음과 같습니다 RGB 기가 바이트 RG RG B 형 RB가

그러나, BGR BRG BR GR BG 같은 더 가능한 조합이 있습니다

가능한 모든 조합을 표시하려면 코드에서 어떤 기회가 필요합니까?

미리 감사드립니다.

+4

기술적으로 당신은 순열을 의미한다. – j08691

+0

순열에 대한 수학 공식이 없습니까? – Huangism

+0

코드는 문자열의 문자 중 가능한 모든 (비어 있지 않은) ** 부분 집합 **을 완벽하게 계산합니다. 코드에서 조합을 계산할 기회가별로 없습니다. – Bergi

답변

1

아마 아닐 가장 효율적인 방법 ..

function permute(str) { 
    var s, c, i, e, n, ce = []; 
    if (str) { 
     for (i = 0; i < str.length; ++i) { 
      c = str.charAt(i); 
      s = str.slice(0, i) + str.slice(i + 1); 
      ce.push(c); // comment out this line if you always want every char 
      if (s) { 
       e = permute(s); 
       for (n = 0; n < e.length; ++n) { 
        ce.push(c + e[n]); 
       } 
      } 
     } 
    } 
    return ce; 
} 

permute('rgb'); 
/* 
    [ 
     "r", "rg", "rgb", "rb", "rbg", 
     "g", "gr", "grb", "gb", "gbr", 
     "b", "br", "brg", "bg", "bgr" 
    ] 
*/ 
관련 문제