JavaScript 一行代码实现数组全排列 - 包含部分排列
以下是一行 JavaScript 代码,使用递归方式实现数组的全排列,并支持输出小于数组长度的排列结果:
const permute = arr => arr.reduce((acc, item, i) => acc.concat(permute([...arr.slice(0, i), ...arr.slice(i + 1)]).map(p => [item, ...p])), arr.length ? [] : [[]]);
该代码使用递归方式实现了数组的全排列。首先,使用 reduce 方法对数组进行遍历,对每个元素进行处理。然后,使用 concat 方法将当前元素与剩余元素的全排列进行合并。最后,使用递归方式对剩余元素进行全排列的计算,直到数组长度为 0 时返回空数组。
例如,对于数组 [1, 2, 3],该代码将输出以下所有可能的排列:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]
此外,该代码还支持输出小于数组长度的排列结果。例如,对于数组 [1, 2, 3],该代码也将输出以下所有可能的排列:
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 1]
[3, 2]
[1]
[2]
[3]
[]
该代码简洁高效,可以方便地用于各种需要实现数组全排列的场景。
原文地址: https://www.cveoy.top/t/topic/pD98 著作权归作者所有。请勿转载和采集!