回溯法算法题
# 全排列 【L46】
问题描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
const res = [];
const used = {};
let dfs = (path) => {
if (path.length == nums.length) {
return res.push(path.slice());
}
for (const num of nums) {
// 使用过的,跳过
if (used[num]) continue;
// 选择当前的数,加入path
path.push(num);
// 记录一下 使用了
used[num] = true;
dfs(path);
path.pop();
used[num] = false;
}
};
dfs([]); // 递归的入口,空path传进去
return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
更新时间: 2/10/2022, 7:21:32 PM