输出自然数 11 到 nn 所有不重复的排列,即 nn 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
一个整数 n\ (1 \le n \le 9)n (1≤n≤9)。
输出格式
由 1\sim n1∼n 组成的所有不重复的数字序列,每行一个序列。每个数字保留 55 个常宽。
输出时每行末尾的多余空格,不影响答案正确性
样例输入 复制
3
样例输出 复制
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
这里不管是用数组还是集合,到了8以上都会超时,求大佬指点指点
import java.util.Scanner;
/**
* Created on 11:23 17/02/2020
* Description:
*
* @author Weleness
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
o = new int[n + 1];
p = new int[n + 1];
dfs(1, n, o);
}
private static int[] o, p;
private static void dfs(int step, int n, int[] o) {
if (step > n) {
for (int i = 1; i < p.length; i++) {
System.out.printf("%5d", p[i]);
}
System.out.printf("\n");
return;
}
for (int i = 1; i <= n; i++) {
if (o[i] != 1) {
o[i] = 1;
p[step] = i;
dfs(step + 1, n, o);
p[step] = 0;
o[i] = 0;
}
}
}
}