public class Main {
    public static void main(String[] args) {
        perm(new int[]{1,2,3},0,2);
    }
    public static void perm(int[] array,int start,int end) {
        if(start==end) {
            System.out.println(Arrays.toString(array));
        } else {
            for (int i = start; i <= end; i++) {
                //1,2,3的全排列这块相当于将其中一个提了出来,下次递归从start+1开始
                swap(array,start,i);
                perm(array,start+1,end);
                //这块是复原数组,为了保证下次另外的同级递归使用数组不会出错
                //这块可以通过树来理解,每次回退一步操作,交换回去
                swap(array,start,i);
            }
        }
    }
    public static void swap(int[] array,int i,int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

}

蓝桥杯2017年java组c组省赛第三个填空题是需要9个数进行全排列的,我只能想到9层for循环,并且每一个循环都有它的限定,写了好长。而上面这个模板就很好用了,以后就可以直接在 这里面写。非常好用!

if(start==end) {
         //在这里面对数据进行处理和筛选,例如:
         //求1到9中能够构成等边三角形的个数,且满足每条边的数字和也相等。
        int a = arr[0] + arr[1] + arr[2] + arr[3];
		int b = arr[3] + arr[4] + arr[5] + arr[6];
		int C = arr[6] + arr[7] + arr[8] + arr[0];
		if(a==b && a==c)
		count++ ;

        }

打印全排列 java java实现全排列的代码_排序算法