2012-09-03 79 views
2

给定字符串,打印所有排列。为此,我想出了以下程序。排列字符串

public static char[] swap(char[] input, int i, int j) { 
     char temp; 
     temp = input[i]; 
     input[i] = input[j]; 
     input[j] = temp; 

     return input; 

    } 

    /** 
    * 
    * @param args 
    */ 

    public static void permuteStrings(char[] inputString, int start, int finish) { 
     //Base case: When there is only single element, print the string 
     if(start == finish) 
      System.out.println(inputString); 
     else { 
      //Recursive case: Swap first element with all the elements and permute on the 
          // rest of string. 
      for(int i = start; i <= finish; i++) { 
       inputString = swap(inputString, start, i); 
       permuteStrings(inputString, i + 1, finish); 
       inputString = swap(inputString,start, i); //restoring the original string 
      } 
     } 
    } 

但是,对于给定的输入ABC,一切版画是

ABC 
BAC 

我似乎无法弄清楚的问题是什么

+2

你怎么调用呢? – Qnan

+0

我调用它作为permuteStrings(输入,0,input.length -1)。我想到了这个问题,我为其他人添加了答案。 –

回答

1

想通了这个问题。问题出在函数调用:

permuteStrings(inputString, i + 1, finish);

正确的方法是:

permuteStrings(inputString, start + 1, finish); 
+0

因此它在我之前跟踪我 –

+0

之前的问题是条件“开始==完成”,最后递归调用失败 –

0

使用递归

public static void permutation(String str) 
{ 
permutation("", str); 
} 
private static void permutation(String prefix, String str) { 
int n = str.length(); 
if (n == 0) 
System.out.println(prefix); 
else 
{ 
    for (int i = 0; i < n; i++) 
    permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n)); 
} 
}