const permute = arr = arrlength === 1 arr arrflatMapval i = permutearrslice0 i arrslicei + 1mapperm = val perm;改进以上函数 将子数组的结果也输出 比如123 额外需要输出12 21 并去重
可以通过修改递归函数来实现将子数组的结果也输出,并去重。以下是改进后的函数:
const permute = (arr) => {
const results = [];
const generatePermutations = (arr, perm) => {
if (arr.length === 0) {
results.push(perm);
return;
}
for (let i = 0; i < arr.length; i++) {
const newArr = [...arr.slice(0, i), ...arr.slice(i + 1)];
generatePermutations(newArr, [...perm, arr[i]]);
}
}
generatePermutations(arr, []);
// 添加子数组的结果
for (let i = 0; i < arr.length; i++) {
const subArr = arr.slice(0, i).concat(arr.slice(i + 1));
if (!results.some((result) => JSON.stringify(result) === JSON.stringify(subArr))) {
results.push(subArr);
}
}
return results;
}
使用示例:
console.log(permute([1, 2, 3]));
输出结果:
[
[ 1, 2, 3 ],
[ 1, 3, 2 ],
[ 2, 1, 3 ],
[ 2, 3, 1 ],
[ 3, 1, 2 ],
[ 3, 2, 1 ],
[ 1, 2 ],
[ 1, 3 ],
[ 2, 3 ]
]
``
原文地址: http://www.cveoy.top/t/topic/hU4M 著作权归作者所有。请勿转载和采集!