从任意数量的列表(每个列表的长度不同)生成包含所有可能的唯一组合的单个列表,可以是具有挑战性的任务。本文探讨了使用递归概念的基于 Java 的解决方案。
问题陈述
给定未知数量的列表,每个列表的长度未知,目标是创建一个包含这些列表中所有可能的元素组合的列表。例如,列表 X 和 Y 定义为:
X: [A, B, C] Y: [W, X, Y, Z]
预期输出将是一个包含 12 种组合的列表:
[AW, AX, AY, AZ, BW, BX, BY, BZ, CW, CX, CY, CZ]
解决方案
该解决方案利用递归来生成所有可能的组合。这些列表存储在列表列表中,并创建一个结果列表来保存排列。 generatePermutations 方法将列表列表、结果列表、深度参数和表示当前排列的字符串作为输入。
generatePermutations 方法
<code class="java">void generatePermutations(List<List<Character>> lists, List<String> result, int depth, String current) { // Base case: if we've reached the end of the list of lists if (depth == lists.size()) { result.add(current); return; } // Get the current list at the specified depth List<Character> currentList = lists.get(depth); // Iterate over each element in the current list for (int i = 0; i < currentList.size(); i++) { // Recursively call generatePermutations to build permutations generatePermutations(lists, result, depth + 1, current + currentList.get(i)); } }</code>
对generatePermutations 方法的初始调用会将深度设置为0,并将当前字符串设置为空字符串。每次递归调用都会增加深度并将当前字符连接到当前字符串。当深度等于列表数量时达到基本情况,此时,当前排列将添加到结果列表中。
通过利用递归,generatePermutations 方法有效地构造了所有可能的组合输入列表中的元素并将它们添加到结果列表中。该解决方案高效且适用于任何数量或长度的输入列表。
以上是如何在 Java 中使用递归从多个列表生成所有可能的组合?的详细内容。更多信息请关注PHP中文网其他相关文章!