Viết hàm JavaScript tạo tổ hợp từ n mảng với m phần tử mỗi mảng.
Ví dụ dữ liệu:
const arr = [ [0,1], [0,1,2,3], [0,1,2] ]
3 mảng con, số phần tử khác nhau. Muốn lấy tất cả tổ hợp bằng cách lấy một phần tử từ mỗi mảng.
Ví dụ: 0,0,0 (phần tử 0 từ mảng 0, phần tử 0 từ mảng 1, phần tử 0 từ mảng 2), 0,0,1, 0,0,2, 0,1,0...
Số mảng có thể thay đổi.
Ví dụ
const arr = [
[0,1],
[0,1,2,3],
[0,1,2]
];
const combineAll = (array) => {
const res = [];
let max = array.length - 1;
const helper = (arr, i) => {
for (let j=0, l=array[i].length; j<l; j++) {
let copy = arr.slice(0);
copy.push(array[i][j]);
if (i==max)
res.push(copy);
else
helper(copy, i+1);
};
};
helper([], 0);
return res;
};
console.log(combineAll(arr));Kết quả
Kết quả in ra console (24 tổ hợp):
[ [ 0, 0, 0 ], [ 0, 0, 1 ], [ 0, 0, 2 ], [ 0, 1, 0 ], [ 0, 1, 1 ], [ 0, 1, 2 ], [ 0, 2, 0 ], [ 0, 2, 1 ], [ 0, 2, 2 ], [ 0, 3, 0 ], [ 0, 3, 1 ], [ 0, 3, 2 ], [ 1, 0, 0 ], [ 1, 0, 1 ], [ 1, 0, 2 ], [ 1, 1, 0 ], [ 1, 1, 1 ], [ 1, 1, 2 ], [ 1, 2, 0 ], [ 1, 2, 1 ], [ 1, 2, 2 ], [ 1, 3, 0 ], [ 1, 3, 1 ], [ 1, 3, 2 ] ]