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++ ;
}