https://leetcode-cn.com/problems/permutations/
伪代码
1、定义回溯中的状态:结果数组res,可能的排列arr
2、定义搜索终止条件:arr长度等于nums的原始长度时,将arr加入res
3、画出选择树
实现
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
let res = [];
dfs(nums, [], res, new Set());
return res;
};
function dfs(nums, arr, res, set) {
if(arr.length === nums.length) res.push(arr.slice());
for(let i=0;i<nums.length;i++) {
if(!set.has(i)) {
set.add(i);
arr.push(nums[i]);
dfs(nums, arr.slice(), res, set);
arr.pop();
set.delete(i);
}
}
}