当前位置:首页 > 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[] array1 = {1, 2, 3, 4, 5}; String[] array2 =…

java如何定义一个数组

java如何定义一个数组

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

vue怎样实现数组绑定

vue怎样实现数组绑定

Vue 实现数组绑定的方法 Vue 提供了多种方式来实现数组的绑定,以下是常见的几种方法: 使用 v-for 指令绑定数组 通过 v-for 指令可以遍历数组并渲染列表。语法如下: <ul&…

vue实现添加数组

vue实现添加数组

Vue 实现添加数组的方法 在 Vue 中,可以通过多种方式实现向数组添加元素。以下是几种常见的方法: 使用 push 方法 通过 Vue 的响应式系统,直接调用数组的 push 方法添加元素:…

react如何遍历数组

react如何遍历数组

遍历数组的方法 在React中遍历数组并渲染元素,可以使用多种方法。以下是常见的几种方式: 使用map方法 map是React中最常用的数组遍历方法,它会返回一个新的数组,适合渲染列表。…

react如何定义一哥数组

react如何定义一哥数组

定义数组的方法 在React中,可以通过多种方式定义和使用数组。以下是常见的几种方法: 使用useState钩子定义状态数组 import { useState } from 'react…