递归获取元素的笛卡尔积
private static List<String> cartesianProduct(List<List<String>> result) {
// 计算出笛卡尔积行数
int rows = result.size() > 0 ? 1 : 0;
for (List<String> data : result) {
rows *= data.size();
}
// 笛卡尔积索引记录
int[] record = new int[result.size()];
List<String> results = new ArrayList();
// 产生笛卡尔积
for (int i = 0; i < rows; i++) {
StringBuffer rowsValue = new StringBuffer();
// 生成笛卡尔积的每组数据
for (int index = 0; index < record.length; index++) {
rowsValue.append(index == 0 ? result.get(index).get(record[index]) : "-" + result.get(index).get(record[index]));
}
results.add(rowsValue.toString());
crossRecord(result, record, result.size() - 1);
}
return results;
}
private static void crossRecord(List<List<String>> result, int[] record, int level) {
record[level] = record[level] + 1;
if (record[level] >= result.get(level).size() && level > 0) {
record[level] = 0;
crossRecord(result, record, level - 1);
}
}
记得三连哟!么么哒!!!