全排列是DFS的经典应用,无论是在平时的工作中还是在面试中,都是经常被问到的考点,接下来让我们一起来探究这个问题吧。
题目描述
解题思路
本题的核心解题思路就是使用DFS(深度优先遍历),遍历完一条路径然后再去遍历另一条路径,通过使用一个used对象来记录目标元素是否被遍历过,来实现DFS。
var permute = function(nums) {
const result = [];
const used = {};
function dfs(paths) {
if (paths.length === nums.length) {
result.push(paths.slice());
return;
}
for (let i = 0; i < nums.length; i++) {
if (used[i]) {
continue;
}
paths.push(nums[i]);
paths
used[i] = true;
dfs(paths);
paths.pop();
used[i] = false;
}
}
dfs([])
return result;
};
复制代码
题目反思
- DFS实现的核心在于使用一个对象来记录目标元素是否遍历过。
- dfs遍历完一条路径之后,需要将路径数组中去掉栈顶元素,然后将该元素置未遍历状态。