碎片时间学编程「65]:生成数组元素的所有排列(包含重复项)


碎片时间学编程「65]:生成数组元素的所有排列(包含重复项)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 使用递归。
  • 对于给定数组中的每个元素,为其其余元素创建所有部分排列。
  • 使用Array.prototype.map()方法将元素与每个部分排列组合,然后使用Array.prototype.reduce()方法将所有排列组合到一个数组中。
  • 使Array.prototype.length等于21
  • ⚠️警告:这个函数的执行时间随着每个数组元素呈指数增长。任何超过 8 到 10 个条目都可能导致您的浏览器在尝试解决所有不同组合时挂起。

JavaScript

const permutations = arr => {
  if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;
  return arr.reduce(
    (acc, item, i) =>
      acc.concat(
        permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [
          item,
          ...val,
        ])
      ),
    []
  );
};

更多内容请访问我的网站:https://www.icoderoad.com

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章