全排列java

旧巷老猫 提交于 2019-12-11 06:55:09

定义:

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

公式:全排列数f(n)=n!(定义0!=1)

例如:求1、2、3、4、5、6、7、8、9的全排列

思路:

  1. 将开始的九个数中的第一个数逐个与所有数交换得到
    1 2 3 4 5 6 7 8 9
    2 1 3 4 5 6 7 8 9
    3 2 1 4 5 6 7 8 9
    4 2 3 1 5 6 7 8 9
    5 2 3 4 1 6 7 8 9
    6 2 3 4 5 1 7 8 9
    7 2 3 4 5 6 1 8 9
    8 2 3 4 5 6 7 1 9
    9 2 3 4 5 6 7 8 1
  2. 忽略排好的第一列,对每一行剩下的8个数再进行相同操作,例如第一行,得到:
    2 3 4 5 6 7 8 9
    3 2 4 5 6 7 8 9
    4 3 2 5 6 7 8 9
    5 3 4 2 6 7 8 9
    6 3 4 5 2 7 8 9
    7 3 4 5 6 2 8 9
    8 3 4 5 6 7 2 9
    9 3 4 5 6 7 8 2
  3. 忽略排好的第一列,对每一行剩下的7个数再进行相同操作…
  4. 当第一个数和最后一个数重合时操作结束。

代码

import java.util.Arrays;
public class QuanPaiLie{	
	public static void perm(int[] a,int begin,int end){ 
	    if(begin==end) {
	    	System.out.println(Arrays.toString(a));
	    }else {
	    	for(int i=begin;i<=end;i++) {
	    		int temp=a[begin];
	    		a[begin]=a[i];
	    		a[i]=temp;
	    		perm(a,begin+1,end);
	    		temp=a[begin];
	    		a[begin]=a[i];
	    		a[i]=temp;
	    	}
	    }
	}  
	public static void main(String args[]){
		int[] in={1,2,3,4,5,6,7,8,9};
		perm(in,0,in.length-1);
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!