用Java迭代生成所有置换字符串对

问题描述 投票:1回答:1

我正在尝试编写一个函数,这样,如果给定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。谁能帮忙写一个迭代的方法吗?

java iteration permutation
1个回答
0
投票
您不需要递归函数;两个嵌套循环即可。

基本上,循环i from 0 to n-1以获得该对中的第一个元素;然后再次循环,循环j from 0 to n-1, where i<>j,并取对(i,j)。 (并且显然将所有这样的对放入out集合中。)

© www.soinside.com 2019 - 2024. All rights reserved.