当前位置: 首页 > 知识库问答 >
问题:

我正在查找给定数组列表的所有可能的排列,我想将所有可能的排列存储在全局变量中,但不能这样做

巫煌
2023-03-14

在下面给出的代码中,我在函数permute中添加了ArrayList的一个特定排列,但在主函数中打印时,并不打印所有可能的排列,否则将打印相同的ArrayList。N!其中n是给定ArrayList的长度。

我在permute函数中将set(我的全局变量)中的permutaions添加为set.add(names),但在main函数中打印它时,它给出的输出是相同的未排列的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);
        }
        
        ;
        
        
    }       
}

共有1个答案

孔城
2023-03-14

您正在重复地将相同的对象名称添加到中。但您需要添加names的副本。

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

这是一个很好的例子

        set.add(new ArrayList<>(names));
 类似资料:
  • 问题内容: 在Python中,我有一个n个列表的列表,每个列表具有可变数量的元素。如何创建包含所有可能排列的单个列表: 例如 我想要 注意,我事先不知道n。我以为itertools.product是正确的方法,但它需要我提前知道参数的数量 问题答案: 您不需要事先知道使用

  • 问题内容: 我有绳子。我想通过更改字符串中的字符顺序来从该字符串生成所有排列。例如,说: 我想要的是这样的清单, 目前,我正在迭代字符串的列表强制转换,随机选择2个字母并将它们换位以形成新的字符串,然后将其添加到设置的l强制转换中。根据字符串的长度,我正在计算可能的排列数量,并继续迭代直到集合大小达到极限。必须有更好的方法来做到这一点。 问题答案: itertools模块具有一个有用的方法,称为p

  • 问题内容: 我有从0到8的数字。我想结果是这些数字的所有可能集合,每个集合都应使用所有数字,每个数字在集合中只能出现一次。 我希望看到用PHP制作的解决方案可以打印出结果。或者,至少,我希望在组合理论上有所收获,因为我早已忘记了它。计算多少排列的公式是什么? 示例集: 0-1-2-3-4-5-6-7-8 0-1-2-3-4-5-6-8-7 0-1-2-3-4-5-8-6-7 0-1-2-3-4-8

  • 问题内容: 我需要计算出 仅 在python中所有可能的 大小写 排列的列表,例如,使用ar输入它将返回[‘ar’,’Ar’,’aR’,’AR’] 或arc [‘arc’,’ Arc”,“ ARc”,“ aRc”,“ aRC”,“ ARC”],我知道可能有一些不错的方法,但对于我的一生,我无法弄清楚。 问题答案:

  • 问题内容: 我有一些复杂的计算算法,基本上可以测试一些较小的矩阵是否适合另一个较大的矩阵。 是否所有矩阵都适合大矩阵,取决于小矩阵的顺序。如果小矩阵不合适,则应重新排列ArrayList并重试,直到测试了所有可能的顺序/序列为止。 如果我有5个小矩阵,则总共有 5个! (= 120)数组可以有的订单。 我的问题是我不知道如何重新排列这些对象(矩阵),因此我可以测试所有可能的顺序。我希望有人可以帮助

  • 我试图找到Python中提供的一个数的所有可能的因式分解。 例如:1)给定n=12,输出为,f(n)=[[2,2,3],[4,3],[6,2],[12]] 2)给定n=24,输出为,f(n)=[2,2,2,3],[2,2,6],[2,12],[4,6],[8,3],[24]] 2)1)对于n=24,输出为, 我可以做什么来获得相关的结果?