生成数组元素的所有排列组合(包含重复项)
使用递归。
对于给定数组中的每个元素,创建其余元素的所有部分排列。
使用 Array.prototype.map() 将元素与每个部分排列组合,然后使用 Array.prototype.reduce() 将所有排列组合成一个数组。
Array.prototype.map()
Array.prototype.reduce()
基本情况是 Array.prototype.length 等于 2 或 1 时。
Array.prototype.length
2
1
警告:此函数的执行时间随着数组元素的增加而呈指数增长。超过8到10个可能会导致卡死。
如果只是想生成并使用每个排列,而不是存储所有的排列,可以考虑使用一个生成器函数。生成器可以按需生成排列,而不是一次生成所有的排列。
下面是一个使用JavaScript生成器的例子。它使用了Heap's Algorithm,这是一个非递归算法: