我正在尝试编写一个函数,这样,如果给定n个字符串,它将生成所有n P 2
对此类字符串。例如,如果我有[ab, bc, bd]
,它将生成[[ab, bc], [bc, ab], [ab, bd], [bd, ab], [bc, bd], [bd, bc]]
,不一定按此顺序。我有一个麻烦的递归函数,
private static void permutation(ArrayList<String> names, int pos, String[] pair, ArrayList<ArrayList<String>> out) {
if (pos == names.size()) {
if(!names.get(0).equals(names.get(1))){
out.add(new ArrayList<String>(Arrays.asList(names.get(0), names.get(1))));
}
} else {
for (int i = 0 ; i < pair.length ; i++) {
names.add(pair[i]);
permutation(names, pos+1, pair, out);
}
}
}
但是当字符串超过6个时,会生成一个stackoverflow error
。谁能帮忙写一个迭代的方法吗?
基本上,循环i from 0 to n-1
以获得该对中的第一个元素;然后再次循环,循环j from 0 to n-1, where i<>j
,并取对(i,j)
。 (并且显然将所有这样的对放入out
集合中。)