下面是需要排重的全排_模板
在上面模板上使用了哈希表查重,把一些数组并接成字符串
import java.util.HashSet;
public class 全排列_模板3 {
public static void main(String[] args) {
dfs(0);
System.out.println(ans);//9的全排有362880种
System.out.println(set.size());//1680
}
static int[] a = new int[] {1,1,1,2,2,2,3,3,3};
static int n=9,ans=0;
static HashSet<String> set = new HashSet<>();
static void dfs(int m) {
if(m>=n) {
System.out.println("一些核心的操作 比如ans:"+ans);
ans++;
String s="";
for(int i=0;i<n;i++) {
s+=a[i];
System.out.print(a[i]+" ");
}
System.out.println();
set.add(s);
return;
}
for(int i=m;i<n;i++) {
swap(i,m);
dfs(m+1);
swap(i,m);//回溯
}
}
static void swap(int i,int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
使用哈希表查重后是无序的