2016-08-07 3 views
0

고정 길이 3 배열의 다른 순열을 생성하는 프로그램을 작성하고 있습니다. 내가 직면하고있는 주요 문제는 항상 dublicate 순열을 생성한다는 것입니다, 어떻게 수정합니까? Java set <>을 사용하지 않아도됩니다. 다음고정 길이 (L)의 다른 뚜렷한 순열을 생성

public class generatingCombination { 

    public static void main(String[] args) { 
     String s="ABCDEF"; 
      printArray(s,0,new char[3], new boolean[s.length()]); 

    } 

    static void printArray(String s,int x,char []arr, boolean [] used){ 
     if(x==3){ 
      System.out.println(Arrays.toString(arr)); 
      return; 
     } 
     else 
     { 
      for(int i=0;i<s.length();i++){ 
       if(used[i]) continue; 

       arr[x]=s.charAt(i); 
       used[i]=true; 
       printArray(s, x+1, arr,used); 
       used[i]=false; 
       printArray(s, x+1, arr,used); 

      } 
     } 

    } 
} 
+0

당신은 중복을 받고 있습니다. 왜 그것을하고 있습니까? 설정 값 (두 번째 재귀 호출)없이 self를 호출하면'used' 배열의 요점은 무엇입니까? – Andreas

+0

@YS. - 예상 출력에 예제를 제공하십시오 –

+0

두 번째 printArray 호출은 첫 번째 printArray 호출과 마찬가지로 첫 번째 출력을 인쇄합니다. – tim4242

답변

0

는 길이 3의 순열에만 관심이 있다면, 왜 그냥 : 두 번 재귀 호출을하고 있기 때문에

public static void main(String[] args) { 
    String s = "ABCDEF"; 
    for (int i = 0; i < s.length(); i++) { 
     for (int j = 0; j < s.length(); j++) { 
      if (j == i) { 
       continue; 
      } 
      for (int k = 0; k < s.length(); k++) { 
       if (k == i || k == j) { 
        continue; 
       } 
       System.out.println(Arrays.toString(new char[] { s.charAt(i), s.charAt(j), s.charAt(k)})); 
      } 
     } 
    } 
}