为了去除重复的排列组合使用一个Set集合,可以去除重复的组合
例如:
输入:
1 2 3
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
实现的代码:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str[] = sc.nextLine().split(" ");
int arr[] = new int[str.length];
for(int i=0;i<arr.length;i++){
arr[i] = Integer.valueOf(str[i]);
}
fullSort(arr, 0,arr.length-1);
for (String s:list){
System.out.println(s);
}
}
/**
* 全排列,并且保证排列的没有重复的组合:例如[1,2,3]
*/
private static Set<String> list = new HashSet<>(); //创建Set集合存储排列的组合
public static void fullSort(int arr[],int start,int end){
if(start==end){
String res ="";
for(int i:arr){
// System.out.print(i+" ");
res += i+" ";
}
// System.out.println(res.trim()); //trim()是去除字符串前后的空的串
list.add(res.trim());
return;
}
for(int i=start;i<=end;i++){
swap(arr, i,start);
fullSort(arr,start+1,end);
swap(arr, i,start);
}
}
private static void swap(int arr[],int i,int j){
int temp = arr[i];
arr[i] =arr[j];
arr[j] =temp;
}