基本思想:
1)可以将一个字符串看成由两部分组成:第一部分为第一个字符,第二部分为除第一个字符外的所有字符。首先求所有可能出现在第一个位置的所有字符,把每一个字符都和其他字符交换位置。如下图所示:
(a)
(b)
(c)
2)第二步固定第一个字符,对后面的字符进行全排列,仍然将除第一个字符外的所有字符分为两个部分,重复 1) 步骤,直到固定的字符为最后一个字符,即找到所有的全排列
package char7;
public class StringAllPaiXu {
public char[] getChar(String str) {
return str.toCharArray();
}
public void sort(char[] str,int start) {
if(start == str.length - 1) {
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]);
}
System.out.println();
}else {
for (int i = start; i < str.length; i++) {
swap(str,start,i);
sort(str,start+1);
//还原原来的位置
swap(str,start,i);
}
}
}
public char[] swap(char[] str,int begin,int end) {
char temp = str[begin];
str[begin] = str[end];
str[end] = temp;
return str;
}
}