[英]finding all possible permutations of a given ArrayList<String>, and Storing them in global variable
在下面給出的代碼中,我在 function permute
中添加了ArrayList
的特定排列,但在main
function 中打印時,所有可能的排列都未打印。 相反,打印相同的ArrayList<String>
n! n 是給定ArrayList<String>
長度的時間。
I am adding the permutations in set
(my global variable) in permute
function as set.add(names)
but while printing it in main
function it gives output as the same unarranged Arraylist.
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);
}
}
}
您重復添加相同的 object names
來set
。 但是您需要添加names
的副本。
set.add((ArrayList<String>)names);
→
set.add(new ArrayList<>(names));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.