在Java中迭代生成字符串的所有置换对

在Java中迭代生成字符串的所有置换对,java,iteration,permutation,Java,Iteration,Permutation,我试图编写一个函数,这样给定n个字符串,它会生成所有np2对这样的字符串。例如,如果我有[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<S

我试图编写一个函数,这样给定n个字符串,它会生成所有
np2
对这样的字符串。例如,如果我有
[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);
            }
        }
    }
私有静态无效置换(ArrayList名称、int-pos、字符串[]对、ArrayList-out){
if(pos==names.size()){
如果(!names.get(0).equals(names.get(1))){
add(新的ArrayList(Arrays.asList(names.get(0),names.get(1)));
}
}否则{
for(int i=0;i

但是当有超过6个字符串时,这会生成一个
堆栈溢出错误。有人能帮你写一个迭代方法吗?

你不需要递归函数;两个嵌套循环就可以了


基本上,从0到n-1循环
i以获得对的第一个元素;然后再次循环,将
j从0循环到n-1,其中ij
,并取这对
(i,j)
。(显然,将所有这些对放入
out
集合中。)

您不需要递归函数;两个嵌套循环就可以了

基本上,从0到n-1循环
i以获得对的第一个元素;然后再次循环,将
j从0循环到n-1,其中ij
,并取这对
(i,j)
。(显然,将所有这些对放入
out
集合。)