从多个列表生成所有组合

新手上路,请多包涵

给定未知数量的列表,每个列表的长度都未知,我需要生成一个包含所有可能的唯一组合的单一列表。例如,给定以下列表:

 X: [A, B, C]
Y: [W, X, Y, Z]

那么我应该能够生成 12 种组合:

 [AW, AX, AY, AZ, BW, BX, BY, BZ, CW, CX, CY, CZ]

如果添加了 3 个元素的第三个列表,我将有 36 种组合,依此类推。

关于如何在 Java 中执行此操作的任何想法?

(伪代码也可以)

原文由 Michael Hillman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 761
2 个回答

你需要递归:

假设您的所有列表都在 lists 中,这是一个列表列表。让 result 成为所需排列的列表。你可以这样实现它:

 void generatePermutations(List<List<Character>> lists, List<String> result, int depth, String current) {
    if (depth == lists.size()) {
        result.add(current);
        return;
    }

    for (int i = 0; i < lists.get(depth).size(); i++) {
        generatePermutations(lists, result, depth + 1, current + lists.get(depth).get(i));
    }
}

最终的调用将是这样的:

 generatePermutations(lists, result, 0, "");

原文由 Armen Tsirunyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题