当前位置:首页 > JavaScript

js数组实现全排列

2026-01-31 04:41:37JavaScript

全排列的概念

全排列是指将一组元素的所有可能的排列方式列举出来。例如,数组 [1, 2, 3] 的全排列包括 [1, 2, 3][1, 3, 2][2, 1, 3] 等共 6 种排列。

js数组实现全排列

递归方法实现全排列

递归是解决全排列问题的常见方法,通过不断交换数组元素的位置生成所有可能的排列。

js数组实现全排列

function permute(nums) {
  const result = [];

  function backtrack(start) {
    if (start === nums.length) {
      result.push([...nums]);
      return;
    }

    for (let i = start; i < nums.length; i++) {
      [nums[start], nums[i]] = [nums[i], nums[start]]; // 交换元素
      backtrack(start + 1); // 递归处理剩余部分
      [nums[start], nums[i]] = [nums[i], nums[start]]; // 恢复交换
    }
  }

  backtrack(0);
  return result;
}

const arr = [1, 2, 3];
console.log(permute(arr));

堆算法实现全排列

堆算法(Heap's Algorithm)是一种高效的全排列生成算法,通过减少交换次数提高性能。

function heapPermute(nums) {
  const result = [];

  function generate(n) {
    if (n === 1) {
      result.push([...nums]);
      return;
    }

    for (let i = 0; i < n; i++) {
      generate(n - 1);
      if (n % 2 === 0) {
        [nums[i], nums[n - 1]] = [nums[n - 1], nums[i]]; // 偶数位置交换
      } else {
        [nums[0], nums[n - 1]] = [nums[n - 1], nums[0]]; // 奇数位置交换
      }
    }
  }

  generate(nums.length);
  return result;
}

const arr = [1, 2, 3];
console.log(heapPermute(arr));

使用库函数生成全排列

某些 JavaScript 库(如 Lodash)提供了生成全排列的工具函数,可以直接调用。

const _ = require('lodash');

const arr = [1, 2, 3];
const permutations = _.permutations(arr);
console.log(permutations);

注意事项

  • 递归方法的时间复杂度为 O(n!),适合小规模数据。
  • 堆算法的性能优于普通递归方法,适合中等规模数据。
  • 使用库函数可以简化代码,但需引入外部依赖。

标签: 数组排列
分享给朋友:

相关文章

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据…

java如何给数组赋值

java如何给数组赋值

数组赋值的几种方法 在Java中,可以通过多种方式为数组赋值。以下是常见的几种方法: 静态初始化 int[] array1 = {1, 2, 3, 4, 5}; String[] array2 =…

vue数组怎么实现

vue数组怎么实现

Vue 数组操作方法 在 Vue 中操作数组时,需要遵循响应式原则,确保视图能正确更新。以下是常见的数组操作方法: 使用变异方法 Vue 对数组的变异方法进行了封装,这些方法会触发视图更新: pu…

react如何创建数组

react如何创建数组

创建数组的方法 在React中创建数组与普通JavaScript相同,可以使用多种方式。以下是常见的几种方法: 使用数组字面量 const array = [1, 2, 3, 4]; 使用Arra…

java如何定义一个数组

java如何定义一个数组

定义数组的基本语法 在Java中,数组是固定长度的同类型数据集合。定义数组需要指定数据类型和数组名称,并可以选择直接初始化或稍后分配空间。 // 声明数组但不初始化 数据类型[] 数组名; //…

java如何遍历数组

java如何遍历数组

遍历数组的方法 Java中遍历数组有多种方式,以下是常见的几种方法: 使用for循环 通过索引逐个访问数组元素: int[] array = {1, 2, 3, 4, 5}; for (int…