地址:https://leetcode-cn.com/problems/permutations/
题目描述:
给定一个 没有重复 数字的序列,返回其所有可能的全排列,数组中不包含重复元素。
示例:
输入: [1,2,3] 输出: [ [1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
题解思路
初始时,循环数组中的每一个值,并进行递归,递归的目的也是循环数组中每一个值,不过递归中每次循环,都要把已经循环到的值排除在外,只添加未循环到的值,并把这些值存入到子数组集合中,当子数组集合的长度与原来数组长度相同,那这就跑出来一个排列了,把这个子数组集合放在总的数组集合中。
此时退出递归后,把已记录的值从子数组集合踢出,以便下次使用。
题解代码
递归方式:
/*** @param {number[]} nums* @return {number[][]}*/var permute = function(nums) {let child = []; // 每次组合的结果集let result = []; // 总的结果集//定义递归函数const loop = (nums) => {// 如果此次的结果集,和总的长度相同,代表是满了,就添加到总的结果集中if(nums.length === child.length) {result.push([...child])return}// 挨个循环每个字符for(let i = 0; i < nums.length;i++) {// 子结果集中有了,则直接跳过if(child.includes(nums[i])) continue// 将该次的值,放入结果集中child.push(nums[i])// 继续调用loop(nums)// 用完了,出结果集child.pop()}}loop(nums)return result};
