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

获取ArrayList中所有可能的排列

黄永怡
2023-03-14

我试图得到与输入arrayList相同长度的ArrayList的所有可能的排列。也就是说,1,2,3的ArrayList将导致123, 132, 213, 231, 321, 312,不包括1, 2, 12, 13等较短的排列。

public void getAllPermutations(ArrayList<coordinate> coords) {
        ArrayList<coordinate> sub = new ArrayList<coordinate>();
        permutateSub(sub, coords);
    }

    private ArrayList<ArrayList<coordinate>> permutateSub(ArrayList<coordinate> sub,
            ArrayList<coordinate> coords) {
        int n = coords.size();
        if(n == 0) System.out.println(sub);
        else {
            if(sub.size()==n) {
            System.out.println(sub);
            for(int i = 0; i<n; i++) {
                ArrayList<coordinate> a = new ArrayList<coordinate>(sub);
                a.add(coords.get(i));
                ArrayList<coordinate> b = new ArrayList<coordinate>(coords);
                b.remove(i);
                permutateSub(a, b);
            }
        }

    }

坐标是一个类,它只有x、y和y,用于保存项目的二维点。

目前,我正在使用这段代码将其打印到控制台,但如果有人能告诉我如何将其存储到ArrayList中,我也将不胜感激

共有2个答案

印成天
2023-03-14

这里有一种方法:

public static void permutation(List<coordinate> nums) {
    List<List<coordinate>> accum = new ArrayList<List<coordinate>>();
    permutation(accum, Arrays.<coordinate>asList(), nums);
    System.out.println(accum);
}

private static void permutation(List<List<coordinate>> accum, List<coordinate> prefix, List<coordinate> nums) {
    int n = nums.size();
    if (n == 0) {
        accum.add(prefix);
    } else {
        for (int i = 0; i < n; ++i) {
            List<coordinate> newPrefix = new ArrayList<coordinate>();
            newPrefix.addAll(prefix);
            newPrefix.add(nums.get(i));
            List<coordinate> numsLeft = new ArrayList<coordinate>();
            numsLeft.addAll(nums);
            numsLeft.remove(i);
            permutation(accum, newPrefix, numsLeft);
        }
    }
}
闻梓
2023-03-14

看看番石榴的收集2排列方法。

示例(来源)

public void permutations () {
    List<Integer> vals = Ints.asList(new int[] {1, 2, 3});

    Collection<List<Integer>> orderPerm = Collections2.permutations(vals);

    for (List<Integer> val : orderPerm) {
        logger.info(val);
    }
}

/* output:
 [1, 2, 3]
 [1, 3, 2]
 [3, 1, 2]
 [3, 2, 1]
 [2, 3, 1]
 [2, 1, 3]
*/
 类似资料:
  • 问题内容: 我正在尝试获取与输入arrayList相同长度的ArrayList的所有可能排列。即1,2,3的ArrayList将导致123、132、213、231、321、312,不包括较短的排列(例如1,2,12、13等)。这是我到目前为止的代码: 坐标是一个只有x,y且访问了该项目以容纳项目的2D点的类。 当前,我正在使用此代码将其打印到控制台,但是如果有人可以阐明将其存储到ArrayList

  • 问题内容: 我想获得所有可能的可用货币。 Java 7提供了这样的功能。 但是,我仍在使用Java 6进行开发和部署。我可以知道如何获得所有可能的货币吗?代码示例是最受欢迎的。 问题答案: 在研究了ISO表和Currency类文档之后,您似乎可以将货币作为代码或语言环境了。并且Locale类有一个方法。 因此,代码为: 希望这可以帮助。

  • 问题内容: 我有从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

  • 问题内容: 给定一个PHP字符串数组,例如: 如何生成此数组元素的所有可能排列?即: 问题答案: function pc_permute($items, $perms = array()) { if (empty($items)) { echo join(‘ ‘, $perms) . “ “; } else { for ($i = count($items) - 1; $i >= 0; –$i)

  • 问题内容: 我有一个字符数组c [] [],每个索引都有不同的映射。例如: 我需要以字符串形式返回此数组的所有可能字符组合。也就是说,对于上述字符数组,我应该返回:“ ag”,“ ah”,“ ai”,“ bg”,“ bh”,“ bi”,“ cg”,“ ch”,“ ci”等对于上面只有两件事的字符数组,这样做很容易,但是如果有更多的数组,那么我不知道该怎么办…这就是我要大家提供的帮助!:) 问题答案

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