【发布时间】:2014-09-06 21:07:17
【问题描述】:
我正在尝试获取与输入 arrayList 长度相同的 ArrayList 的所有可能排列。 IE。 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 和已访问的类,用于保存项目的 2D 点。
目前我正在使用此代码将其打印到控制台,但如果有人能阐明我如何将其存储到 ArrayList 中,我将不胜感激。谢谢。
【问题讨论】:
-
看起来这可能是stackoverflow.com/questions/4240080/…的副本
-
有趣的是,我看到方法
permutateSub的声明好像它应该返回一个ArrayList<ArrayList<coordinate>>对象,但我在函数代码的任何地方都没有看到return。 -
糟糕,我的错误。无论如何,它仍然会返回更短的排列。
标签: java permutation