Java全排列问题
问题描述: 输入一个整数1< n < 10,然后对1到n的数进行全排列。
题目样例:/*
- 排列与组合是常用的数学方法。
先给一个正整数 ( 1 < = n < = 10 )
例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1 - */
程序代码:
// An highlighted block
import java.util.Scanner;
public class allOfArray {
static int[] arr;
static int[] brr;
static int n;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数来显示他的全排列");
n = scanner.nextInt();
arr = new int[n + 1];//记录排列中的数字的数组
brr = new int[n + 1];//标记使用的数组
dfs(0);//开始从0递归
}
public static void dfs(int step) {
if(step == n) {//如果step等于n打印出来数组
for (int i = 0; i < n; i++) {//这个循环只是把存到arr数组里面的值打印出来
System.out.print(arr[i] + " ");
}
System.out.println();
} else if (step < n) {
for (int i = 1; i <= n ; i++) {//这个循环是整个递归的精华
if(brr[i] == 0) {//判断是否重复
brr[i] = 1;//标记已被使用
arr[step] = i;
dfs(step + 1);//递归循环
brr[i] = 0;//还原标记
}
}
}
else return;//递归的出口
}
}