思路描述:
举例:存在二维数组A,其长度为m,其中没项数组长度随机,求数组A的笛卡尔积结果
假设已知二维数组A的前m-1项的笛卡尔积R1,A的最后一项长度为n,那么数组A的笛卡尔积结果R,只是将R1复制了n次,在每次复制的同时,将R1的每项再加入A的最后一项数组的对应的元素。
那么只要知道当A的长度为1的时候的笛卡尔积,那么长度大于1时的笛卡尔积也就好计算了。
代码实现如下:
function cartesianProduct(resultArr, arr) {
const result = [];
resultArr.forEach((loop1) => {
arr.forEach((loop2) => {
result.push([...loop1, loop2]);
});
});
return result;
}
function getResult(list) {
if (list.length < 2) {
return list[0]?.map((l) => [l]) || [];
}
let result = list[0].map((l) => [l]);
list.forEach((l, i) => {
if (i) {
result = cartesianProduct(result, l);
}
});
return result;
}