当前位置:首页 > 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中,数组可以通过多种方式进行初始化。以下是几种常见的方法: 静态初始化(直接赋值) 在声明数组时直接指定元素值,适用于已知数组内容的情况: int[] numbers…

php实现数组分页

php实现数组分页

PHP 数组分页实现方法 在 PHP 中实现数组分页可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 array_slice 函数 array_slice 函数可以从数组中截取指定范围的…

php 实现排列

php 实现排列

排列的基本概念 排列是指从一组元素中按照一定顺序选取部分或全部元素的不同组合方式。在PHP中,排列可以通过递归或迭代的方式实现。 递归实现排列 递归方法通过不断缩小问题规模来生成排列。每次选择一个元…

js实现数组去重排序

js实现数组去重排序

数组去重排序的实现方法 使用 Set 和 sort 方法 Set 数据结构可以自动去除重复元素,结合数组的 sort 方法可以实现去重和排序。 const arr = [3, 1, 2, 2, 4,…

js导入数组实现柱状图

js导入数组实现柱状图

使用Chart.js库绘制柱状图 安装Chart.js库 npm install chart.js 导入Chart.js和数组数据 import { Chart } from 'chart.js/…

js 数组实现

js 数组实现

数组的基本概念 在JavaScript中,数组是一种用于存储多个值的有序集合。数组中的每个值称为元素,每个元素在数组中有一个位置,称为索引。数组的索引从0开始,依次递增。 创建数组 数组可以通过数组…