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;//遞歸的出口
}
}