查找给定 ArrayList 的所有可能排列<String>,并将它们存储在全局变量中



在下面给出的代码中,我将在函数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));

相关内容

  • 没有找到相关文章

最新更新