思路:使用回溯算法(核心代码)
let result=[]
var dfs = function(路径,选择列表){
if(满足结束条件){
result.add(路径)
return
}
for(选择 in 选择列表){
做选择
dfs(路径,选择列表)
撤销选择
}
}
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
//结果集
let res = [];
//记录路径
let path = [];
//选择列表:nums中不存在于path中的元素
var dfs = function(path,nums){
//结束条件:当nums中的元素全都在path中出现
if(path.length===nums.length){
//拷贝一份path,加入解集res
return res.push(path.concat())
}
for(let i = 0;i<nums.length;i++){
//排除nums中已经在path中出现的数
if(path.indexOf(nums[i])!=-1){
continue
}
//做选择
path.push(nums[i])
dfs(path,nums)
//撤销选择
path.pop()
}
}
dfs(path,nums)
return res
}