数组全排列
· One min read
var arr = [["1","2"],["3","4","5"]];
预期结果
[["1","3"],["1","4"],["1","5"],["2","3"],["2","4"],["2","5"]]
其实这有点像手机的 9 宫格输入法,去算笛卡尔积。
//递归法
const arr = [["1", "2"], ["3", "4", "5"]];
function permuteA(arr) {
if (arr.length === 0) {
return [[]];
}
const result = [];
const rest = permute(arr.slice(1));
for (let i = 0; i < rest.length; i++) {
for (let j = 0; j < arr[0].length; j++) {
result.push([arr[0][j], ...rest[i]]);
} }
return result;
}
const result = permuteA(arr); console.log('递归结果====>:', result);
//迭代法
const arr = [["1", "2"], ["3", "4", "5"]];
function permuteB(arr) {
if (arr.length === 0) {
return [[]];
}
let result = [[]];
for (let i = 0; i < arr.length; i++) {
const newResult = [];
for (let j = 0; j < result.length; j++) {
for (let k = 0; k < arr[i].length; k++) {
newResult.push([...result[j], arr[i][k]]);
} }
result = newResult;
}
return result;
}
const result = permuteB(arr); console.log('迭代结果====>:',result);