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

问题描述

在下面给出的代码中,我在函数 ArrayList 中添加了 permute 的特定排列,但在 main 函数中打印时,不会打印所有可能的排列。相反,同样的 ArrayList<String> 被打印出来!次数,其中 n 是给定 ArrayList<String> 的长度。

我在 set 函数中将 permute(我的全局变量)中的排列添加为 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,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,i);
        }
        
    }       
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)