欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用 JavaScript 对无重复元素的数组进行全排列

程序员文章站 2022-03-27 12:55:45
1、题目描述给定一个 没有重复 数字的序列,返回其所有可能的全排列。2、解题思路1、回溯算法2、准备一个容器数组用来存放全排列的各种情况3、准备一个小数组容器用来放每一种排列的情况4、定义回溯函数用来判断数组是否符合情况4.1、遍历以原始数组元素为根节点的数,可以想象原始数组元素的根节点是空数组4.2、将小数组容器中未出现的元素push()进去4.3、进入回溯函数进行判断,如果满足开头的判断条件则添加进容器数组4.4、否则再次添加未出现的元素,进入回溯函数4.5、将末尾元素pop()出...

1、题目描述

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

2、解题思路

1、回溯算法
2、准备一个容器数组用来存放全排列的各种情况
3、准备一个小数组容器用来放每一种排列的情况
4、定义回溯函数用来判断数组是否符合情况
4.1、遍历以原始数组元素为根节点的数,可以想象原始数组元素的根节点是空数组
4.2、将小数组容器中未出现的元素push()进去
4.3、进入回溯函数进行判断,如果满足开头的判断条件则添加进容器数组
4.4、否则再次添加未出现的元素,进入回溯函数
4.5、将末尾元素pop()出去,就是节点回溯
5、把所有元素的树遍历完后即完成全排列
6、返回容器数组,即为所求全排列的所有情况

3、解题代码

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    let len = nums.length;
    let res = [];
    let arr = [];
    let backTrack = (arr) => {
        if (arr.length == len) {
            res.push(arr);
            return;
        }
        for (let i=0; i<len; i++) {
            if (!arr.includes(nums[i])) {
				arr.push(nums[i]);
                backTrack(arr.slice());
                arr.pop();
            }
        }
    }
    backTrack(arr);
    return res;
}

本文地址:https://blog.csdn.net/qq_24264965/article/details/109265162