可以通过修改递归函数来实现将子数组的结果也输出,并去重。以下是改进后的函数:

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 ]
]
``
const permute = arr = arrlength === 1 arr arrflatMapval i = permutearrslice0 i arrslicei + 1mapperm = val perm;改进以上函数 将子数组的结果也输出 比如123 额外需要输出12 21 并去重

原文地址: http://www.cveoy.top/t/topic/hU4M 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录