java沒有next_permutation()這個函數,需要自己寫。
import java.util.*;
public class Main {
static Scanner sc = new Scanner(System.in);
static int a[] = new int[15];
// 交換函數
static void swap(int x, int y) {
int tmp = a[x];
a[x] = a[y];
a[y] = tmp;
}
// 求全排列
static void permutation(int begin, int end) {
if(begin > end) {
for(int i = 1; i <= end; i++)
System.out.print(a[i]);
System.out.println();
return ;
}
for(int i = begin; i <= end; i++) {
swap(begin, i);
permutation(begin + 1, end);
swap(begin, i);
}
}
// 將[begin, end]範圍內的數按升序排列
static void reverse(int begin, int end) {
while(begin < end) {
swap(begin, end);
begin++;
end--;
}
}
// 尋找下一個比當前序列大的序列
static boolean next_permutation(int begin, int end) {
int i = end;
while(i > begin && a[i - 1] >= a[i]) i--;
if(i == begin) return false;
i--;
int j = end;
while(j > i && a[j] <= a[i]) j--;
swap(i, j);
reverse(i + 1, end);
return true;
}
public static void main(String[] args) {
int n;
n = sc.nextInt();
for(int i = 1; i <= n; i++)
a[i] = sc.nextInt();
do {
for(int i = 1; i <= n; i++)
System.out.print(a[i]);
System.out.println();
} while (next_permutation(1, n));
System.out.println("全排列如下:");
Arrays.sort(a, 1, n + 1);
permutation(1, n);
}
}