Problem: LCR 083. 全排列
思路
使用一个visited数组来记录每一轮递归中数字被使用情况,dfs
Code
/*** @param {number[]} nums* @return {number[][]}*/
var permute = function(nums) {const len = nums.lengthconst cur = [] // 当前轮次的排列结果const res = [] // 结果汇总const visited = {} // 记录数字是否被使用// 传入参数index是当前排列位置的索引, 从0开始, 第0个位置、第1个位置const dfs = (index) => {// 当前index和len相等,即碰到了此轮递归的边界, 那么记录结果if(index === len){// 将cur的浅拷贝添加到结果数组res.push(cur.slice())return }// 遍历数组for(let i=0; i<len; i++){// 如果当前数字没有被处理过if(!visited[nums[i]]){// 标记当前数字为被处理visited[nums[i]] = 1// 把当前数字添加入全排列的一种情况cur.push(nums[i])// 沿着此次排列查找下一个数字dfs(index+1)// 清除尾部的nums[i]cur.pop()// 取消已用过标识, 释放给下一轮使用visited[nums[i]] = 0}}}// 从第一个元素开始遍历dfs(0)return res
};