问题
二维数组的长度和其子数组的长度不定,将各个子数组的元素进行排列组合,将组合的结果作为数组进行输出。
分析
首先简化下问题:
已知二维数组
[[1,2,3],[4,5],[6,9],[1]]
要求各子数组进行排列组合,获得结果为
[
[1, 4, 6, 1]
[1, 4, 9, 1]
[1, 5, 6, 1]
[1, 5, 9, 1]
[2, 4, 6, 1]
[2, 4, 9, 1]
[2, 5, 6, 1]
[2, 5, 9, 1]
[3, 4, 6, 1]
[3, 4, 9, 1]
[3, 5, 6, 1]
[3, 5, 9, 1]
]
这里实现的思路有两种,一种是利用笛卡尔积的思想来处理,另一种就是递归。
方法一
利用笛卡尔积的思想来处理,先对二维数组的前两个元素进行排列组合,获得数组为
[
[1,4],
[1,5],
[2,4],
[2,5],
[3,4],
[3,5]
]
再将该数组与二维数组的第三个元素进行组合,获得新的数组,再继续与二维数组的下一个元素进行组合,直到最后一个元素。
最终获得的数组即为所需的结果。
实现代码如下:
//已知的二维数组
let arr=[[1,2,3],[4,5],[6,9],[1]];
//笛卡尔积的容器,首先存入arr的第一个元素
let finalRes=[].concat(arr[0]);
// 从arr的第二个元素开始,和finalRes进行组合,i=1
for(let i=1;i<arr.length;i++){
//arri存入arr的第i个元素
let arri=[].concat(arr[i]);
let arr0=[];
//计算两个数组的笛卡尔积
for(let j=0;j<finalRe

本文探讨如何使用笛卡尔积和递归两种方法对不定长度二维数组进行排列组合。通过示例代码详细解释了两种方法的实现过程,最终输出组合结果数组。

1455

被折叠的 条评论
为什么被折叠?



