簡體   English   中英

查找給定 ArrayList 的所有可能排列<string> , 並將它們存儲在全局變量中</string>

[英]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 namesset 但是您需要添加names的副本。

        set.add((ArrayList<String>)names);

        set.add(new ArrayList<>(names));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM