排列列表<列表<Integer>>



我有一个包含42个条目的列表。它看起来像这样:

[[2, 3, 8], [2, 3, 5, 8], [3, 5], ...]

我想从列表中的元组生成所有排列。它应该从第一个元组开始。例如:

[[2, 3], [2, 3], [5,3]]
[[2, 8], [2, 3], [5,3]]
[[3, 8], [2, 3], [5,3]]
[[3, 2], [2, 3], [5,5]]
[[8, 3], [2, 3], [5,3]]
[[8, 2], [2, 3], [5,3]]
[[2, 3], [3, 2], [5,3]] 

然后应该为列表中的第二个条目生成元组,到目前为止。最后,我想要一个列表<列表<列表>gt;以及列表中条目的所有元组组合。

这意味着首先我必须从[2, 3, 8]生成所有排列。比CCD_ 2和迄今为止。这应该包括在最终清单中。

我刚开始填写这个例子的清单。

public class Main {
public static void main(String[] args) {
List<List<Integer>> possibleDrivers = new ArrayList<>();
possibleDrivers.add(fill(new Integer[]{2, 3, 8}));
possibleDrivers.add(fill(new Integer[]{2, 3, 5, 8}));
possibleDrivers.add(fill(new Integer[]{3, 5}));
System.out.println(Arrays.toString(possibleDrivers.toArray()));
}
public static List<Integer> fill(Integer[] driver) {
List<Integer> routeDay = new ArrayList<>();
Collections.addAll(routeDay, driver);
return routeDay;
}
}

如何生成此问题的所有对/排列?

排列数总是n!。所以你从第一个元素的第一个元素开始,把它和第二个元素的每个元素配对。继续第一个元素中的第二个元素,依此类推。但在将它们保存到最终列表中之前,请检查它们是否已经在其中,并根据您的要求,将它们保存为重复的,或者将它们扔掉。

最新更新