package test;
import java.util.Arrays;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;
public class Test{
static Scanner sc = new Scanner(System.in);
static String line;
static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/**
* 全排列,没有重复
* @param arr
* @param n
*/
static void quanpai(int[] arr,int n){
if(n==0){
System.out.println(Arrays.toString(arr));
}else{
for(int i=0;i<n;i++){
swap(arr, i, n);
quanpai(arr,n-1);
swap(arr, n, i);
}
}
}
/**
* 全排列,可以重复
* @param arr
* @param n
* @param cur
*/
static void quanpai2(int[] arr,int n,int cur){
if(cur==n){
System.out.println(Arrays.toString(arr));
}else{
for(int i=1;i<=n;i++){
arr[cur] = i;
quanpai2(arr, n, cur+1);
}
}
}
/**
* 字典序全排列,无重复
* @param n
* @param a
* @param cur
*/
public static void print_permutation(int n,int[] a,int cur){
if(cur == n){//如果当前数目为总数,输出
for(int i=1;i<n;i++){
System.out.print(a[i]+",");
}
System.out.println();
}else{
for(int i=1;i<n;i++){//逐个查找数字
boolean OK = true;;
for(int j=1;j<cur;j++){//判断数字是否已经在序列中
if(i == a[j]){
OK = false;
break;
}
}
if(OK){//如果不在序列中
a[cur] = i;//将数字加入序列
print_permutation(n, a, cur+1);//递归调用
}
}
}
}
public static void permutation(int len){
int[] arr = new int[len];
for(int i=0;i<len;i++){
arr[i] = i+1;
}
System.out.println(Arrays.toString(arr));
boolean end = true;
while(end){
end = false;
for(int i=len-1;i>0;i--){
if(arr[i]>arr[i-1]){
System.out.println(i);
end = true;
int j = len-1;
for(;j>i;j--){
if(arr[j]>arr[i-1]){
swap(arr, i-1, j);
break;
}
}
reverse(arr, i+1, j);
System.out.println(Arrays.toString(arr));
break;
}
}
}
}
public static void reverse(int[] arr,int i,int j){
int mid = (i+j+1)>>1;
for(;i<mid;i++,j--){
swap(arr, i, j);
}
}
public static void main(String[] args) {
}
}
全排列
最新推荐文章于 2021-12-14 15:11:24 发布