LeetCode——全排列(DFS)

简介: LeetCode——全排列(DFS)

全排列是DFS的经典应用,无论是在平时的工作中还是在面试中,都是经常被问到的考点,接下来让我们一起来探究这个问题吧。

题目描述

image.png

解题思路

本题的核心解题思路就是使用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遍历完一条路径之后,需要将路径数组中去掉栈顶元素,然后将该元素置未遍历状态。
相关文章
|
7月前
leetcode47全排列2刷题打卡
leetcode47全排列2刷题打卡
38 0
|
6月前
|
存储 算法 数据挖掘
python 数学+减治、下一个排列法、DFS回溯法实现:第 k 个排列【LeetCode 题目 60】
python 数学+减治、下一个排列法、DFS回溯法实现:第 k 个排列【LeetCode 题目 60】
|
2月前
|
算法
Leetcode第46题(全排列)
这篇文章介绍了LeetCode第46题“全排列”的解题方法,使用深度优先搜索(DFS)和回溯算法来生成给定数组的所有可能排列。
36 0
Leetcode第46题(全排列)
|
2月前
Leetcode第47题(全排列II)
LeetCode第47题要求返回一个包含重复数字序列的所有不重复全排列,通过深度优先搜索和去重策略来解决。
33 0
|
4月前
|
算法
LeetCode第46题全排列
LeetCode第46题"全排列"的解题方法,利用回溯法避免重复并确保元素的有序性,生成所有可能的排列组合。
LeetCode第46题全排列
|
4月前
|
算法
LeetCode第47题全排列II
LeetCode第47题"全排列II"的解题方法,通过排序和添加去重逻辑,使用回溯法避免生成重复的排列组合。
|
4月前
|
Python
【Leetcode刷题Python】46. 全排列
本文介绍了LeetCode题目46的Python编程解决方案,题目要求给定一个不含重复数字的数组,返回该数组所有可能的全排列。
27 0
|
6月前
|
机器学习/深度学习 存储 算法
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
Python5种算法回溯+剪枝、字典序、递归交换、计数回溯、迭代法 实现全排列ll【力扣题47】
|
7月前
|
Go
golang力扣leetcode 47.全排列II
golang力扣leetcode 47.全排列II
84 0
|
7月前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
56 4