在下面给出的代码中,我将在函数permute
中添加ArrayList
的特定排列,但在main
函数中打印时,不会打印所有可能的排列。相反,打印相同的ArrayList<String>
n!其中n是给定CCD_ 5的长度。
我将permute
函数中set
(我的全局变量(中的排列添加为set.add(names)
,但在main
函数中打印时,它将输出为相同的未排列数组。
import java.util.*;
public class Q1 {
static Set<ArrayList<String>> set = new HashSet<>(); ;
public static void main(String args[]) {
int n;
Scanner in = new Scanner(System.in);
n = in.nextInt();
ArrayList<String> names = new ArrayList<String>();
for(int i=0;i<n;i++) {
String temp;
temp = in.next();
names.add(temp);
}
System.out.println(set.size());
permute(names,0,names.size()-1);
System.out.println(set.size());
for(ArrayList<String> i : set) {
System.out.println(i);
}
}
public static void permute(ArrayList<String> names , int l, int r) {
if(l==r) {
if(set.contains(names)) {
return;
}
set.add((ArrayList<String>)names);
//System.out.println(names);
return;
}
for(int i=l;i<=r;i++) {
Collections.swap(names,l ,i);
permute(names , l+1, r);
Collections.swap(names,l,i);
}
}
}
您正在重复向set
添加相同的对象names
。但是您需要添加names
的副本。
set.add((ArrayList<String>)names);
→
set.add(new ArrayList<>(names));