const permute = arr = arrlength === 1 arr arrflatMapval i = permutearrslice0 i arrslicei + 1mapperm = val perm;改进以上函数 将子数组的结果也输出 比如123 额外需要输出12 21
可以在递归的基本情况中加入一个额外的判断条件来实现子数组的输出。以下是改进后的函数:
const permute = (arr) => {
if (arr.length === 1) {
return [arr];
} else {
let result = [];
arr.forEach((val, i) => {
const subArr = [...arr.slice(0, i), ...arr.slice(i + 1)];
const subPerms = permute(subArr);
subPerms.forEach((perm) => {
result.push([val, ...perm]);
});
result.push(subArr);
});
return result;
}
};
这样,对于输入 [1, 2, 3],除了输出 [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]] 这样的全排列结果,还会输出 [1, 2], [2, 1], [1, 3], [3, 1], [2, 3], [3, 2] 这样的子数组结果
原文地址: http://www.cveoy.top/t/topic/hU4y 著作权归作者所有。请勿转载和采集!