看了历届的蓝桥杯真题发现有很多都是全排列的题目,全排列的题目是由固定的套路和模板的,现在我来分享一下复制过去改一改就可以用的全排列的模板。
/**
* 全排列模板
*/
public class Main {
static int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static int ans = 0;
public static void main(String[] args) {
fun(0);// 固定
System.out.println(ans / 6);// 可变
}
// 全排列函数
public static void fun(int k) {
// 先判断是否到达边界 check的逻辑可能不同,别的相同
if (k == a.length) {// check部分,可变
int x1 = a[0] + a[1] + a[3] + a[5];
int x2 = a[0] + a[2] + a[4] + a[8];
int x3 = a[5] + a[6] + a[7] + a[8];
if (x1 == x2 && x2 == x3) {
ans++;
}
}
// 然后进行全排列
for (int i = k; i < a.length; i++) {//固定套路,除了i的区间
{
int t = a[i];
a[i] = a[k];
a[k] = t;
}
fun(k + 1);
// 回溯
{
int t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
}
OK,继续Code了~
每日励志:你所厌恶的今天是昨天死去的人所奢望的明天