從任意數量的列表(每個列表的長度不同)生成包含所有可能的唯一組合的單個列表,可以是具有挑戰性的任務。本文探討了使用遞歸概念的基於 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中文網其他相關文章!