給定多組字符數據,例如:
AB
C
DE
F
要求編寫 Java 算法,從每組中各取一個字符,生成所有可能的組合,如 ACDF、ACEF、BCDE、BCEF 等。
這是一個典型的笛卡爾積問題,可以使用遞歸回溯的方式實現。將每組數據存放在二維字符數組中,遞歸遍歷每一組,將當前選擇的字符拼接到結果字符串中,當處理完所有組別時,將結果保存。
public class CombinationGenerator {
private static int size = 0;
public static void main(String[] args) {
char[][] data = {{'A', 'B'}, {'C'}, {'D', 'E'}, {'F'}};
// 計算總組合數
int total = 1;
for (char[] group : data) {
total *= group.length;
}
String[] result = new String[total];
generateCombinations(data, 0, "", result);
// 輸出結果
for (String s : result) {
System.out.println(s);
}
}
private static void generateCombinations(char[][] data, int index, String current, String[] result) {
if (index == data.length) {
result[size++] = current;
return;
}
for (char c : data[index]) {
generateCombinations(data, index + 1, current + c, result);
}
}
}
index == data.length 時,說明已從每組中選取一個字符,將組合存入結果數組。current 累加已選字符,避免使用全局變量。ACDF
ACEF
BCDF
BCEF
該算法靈活通用,可處理任意組數、任意長度的字符組合生成需求。