1、问题:给出一组数列,输出它的全排列。
2、分析
假设有1个数,那就是它本身,有2个数1,2,那全排列只有2组为1,2和2,1;有3个数1,2,3,全排列有6组为1,2,3;1,3,2;2,1,3;2,3,1,;3,1,2;3,2,1;......
假设数集合为U,全排列记为Perm(U),U的全排列定义如下:
(1) 当n=1时,Perm(U) = (u),u是集合中的元素。
(2) 当n>1时,Perm(U) 由(u1)Perm(U1), (u2)Perm(U2),(u3)Perm(U3).....(un)Perm(Un)构成。
其中U1,U2,U3...Un的长度是length-1. (假设U的长度是length),此时问题被分割成n个子问题,还需将U1,U2,U3......Un分别分成n个子问题,一直分割下去,知道每个子问题的长度为1,此时子问题的数量n!每个子问题的很容易解。
public class Main {
public static void main(String[] args) {
int []array = {1,2,3};
Perm(array,0,2);
}
public static void Perm(int[] array,int k,int m){
System.out.println("Perm("+k+","+m+")");
int temp = 0;
if(k == m){
for(int i=0;i<=m;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}else{
for(int i=k;i<=m;i++){
temp = array[k];
array[k] = array[i];
array[i] = temp;
System.out.println("k:"+k+" i:"+i);
Perm(array,k+1,m);
temp = array[k];
array[k] = array[i];
array[i] = temp;
System.