转载自:http://blog.youkuaiyun.com/hackbuteer1/article/details/7462447
用java实现:
一、全排列的递归实现
为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。然后可以将123的第二个数和每三个数交换得到132。同理可以根据213和321来得231和312。因此可以知道——全排列就是从第一个数字起每个数分别与它后面的数字交换。找到这个规律后,递归的代码就很容易写出来了:
public class Permutation {
public static void permutation(char[] arrays, int start, int end) {
if(start == end) {
System.out.println(new String(arrays));
}else{
for (int i = start; i <= end; i++) {
char temp = arrays[start]; // 交换数组第一个元素与后续的元素
arrays[start] = arrays[i];
arrays[i] = temp;
permutation(arrays, start + 1, end); // 后续元素递归全排列
temp = arrays[start]; // 将交换后的数组还原
arrays[start] = arrays[i];
arrays[i] = temp;
}
}
}
public static void main(String[] args) {
String str = "abc";
char[] chars = str.toCharArray();
permutation(chars, 0, chars.length - 1);
}
}