/**
* @author hwy1782@gmail.com
* @creation date 2010-7-7 下午10:06:24
*
*
* 对于一个序列r={4,3,5…}求全排列?
递归解法的思路:
(1)对于一个序列R={4,3,5…},
它其中的每一个数设为Ri,它的全排列我们设为perm(R).
(2)对于R的全排列我们可以转化成几个小的问题:
4开头,{3,5…}的全排列,
3开头,{4,5…}的全排列,
5开头,{4,3…}的全排列
即
Perm(R)= {R1Perm(R-R1) , R2Perm(R-R2) , R3Perm(R-R3)......,RnPerm(R-Rn)}
其核心思想就是:将每个元素放到n个元素组成的队列最前方,
然后对剩余元素进行全排列,依次递归下去。
比如:
a b c
首先将a放到最前方(跟第一个元素交换),然后排列b c,然后将a放回本
来位置,结果 a b c; a c b
其次将b放到最前方(跟第一个元素交换),然后排列a c,然后将b放回
结果 b a c; b c a
*
*/
public class ComputePermutation {
public static void main(String[] args) {
String str = "abc";
char[] array = str.toCharArray();
Perm(array, 0, array.length-1);
// System.out.println(array.length);
}
public static void Perm(char[] array, int start, int end) {
if(start == end){
for(int i = 0; i <= end; i++)
System.out.print(array[i]+" ");
System.out.println();
}else{
for(int i = start; i <= end ; i++){
exchange(array, start, i);
Perm(array, start+1, end);
exchange(array, start, i);
}
}
}
public static void exchange(char[] array, int start, int i){
char temp = array[start];
array[start] = array[i];
array[i] = temp;
}
}