对一个包含n个字母的单词进行全排列:
1,对该单词右边n-1个字母进行全排列
2,轮换所有字母(所有字母左移一位,最左边的字母移动至最右边)
3,以上步骤重复n次(以保证该单词的所有字母都曾经处于第一位)
public class FullPermutation {
private char[] chars;
private int length;
public FullPermutation(String str){
chars = str.toCharArray();
length = chars.length;
}
public void permutation(int n){
//当只剩一个字符时,跳出递归
if(n == 1){
System.out.println(chars);
return;
}
for(int i = 0 ; i < n ; i++){
permutation(n - 1);
move(n);
}
}
private void move(int n){
int p = length - n;
char temp = chars[p];
int i = p + 1;
//顺次左移(右移也可以)
for( ; i < length ; i++){
chars[i-1] = chars[i];
}
chars[i-1] = temp;
}
public static void main(String[] args) {
String str = "abc";
FullPermutation fp = new FullPermutation(str);
fp.permutation(str.toCharArray().length);
}
}abc
acb
bca
bac
cab
cba
422

被折叠的 条评论
为什么被折叠?



