94. 递归实现排列型枚举 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/96/
package 算法;
import java.util.Scanner;
public class B {
static int N = 10;
static int n =0;
static int state[] = new int[N]; //表示还没放过数,1~n表示放了哪个数
static boolean used[] = new boolean[N]; //true 表示用过 , false表示没被用过
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
dfs(1);
}
public static void dfs(int u){
if(u>n){ //边界
for (int i = 1; i <= n; i++) {
System.out.print(state[i]+" ");
}
System.out.println();
return;
}
//依次枚举每个分支,即当前位置可以填哪些数
for (int i = 1; i <= n; i++) {
if(!used[i]){
state[u] =i;
used[i] = true;
dfs(u+1);
//回复现场
state[u]=0;
used[i] =false;
}
}
}
}