LeetCode讲解篇之47. 全排列 II

文章目录

题目描述

题解思路

初始化一个nums中元素是否被访问的数组used、记录还需要递归的深度deep

遍历nums

如果当前元素被访问过或者当前元素等于前一个元素且前一个元素没被访问过就跳过该次遍历

否则选择当前元素,继续递归

直到deep为0,将此次递归选择的数组加入到结果集,退出递归

直到搜索完成,返回结果集

题解代码

python 复制代码
class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        n = len(nums)
        deep = n
        res = []
        tmp = []
        used = [False for _ in range(n)]
        def dfs():
            nonlocal deep
            if deep == 0:
                res.append([num for num in tmp])
                return
            for i in range(n):
                num = nums[i]
                if used[i] or (i > 0 and num == nums[i-1] and used[i-1] == False):
                    continue
                used[i] = True
                tmp.append(num)
                deep -= 1
                dfs()
                deep += 1
                tmp.pop()
                used[i] = False

        dfs()
        return res
相关推荐
南境十里·墨染春水2 小时前
C++传记(面向对象)虚析构函数 纯虚函数 抽象类 final、override关键字
开发语言·c++·笔记·算法
2301_797172752 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
有为少年3 小时前
告别“唯语料论”:用合成抽象数据为大模型开智
人工智能·深度学习·神经网络·算法·机器学习·大模型·预训练
比昨天多敲两行3 小时前
C++ 二叉搜索树
开发语言·c++·算法
Season4503 小时前
C++11之正则表达式使用指南--[正则表达式介绍]|[regex的常用函数等介绍]
c++·算法·正则表达式
Tisfy4 小时前
LeetCode 2839.判断通过操作能否让字符串相等 I:if-else(两两判断)
算法·leetcode·字符串·题解
问好眼4 小时前
《算法竞赛进阶指南》0x04 二分-1.最佳牛围栏
数据结构·c++·算法·二分·信息学奥赛
会编程的土豆4 小时前
【数据结构与算法】优先队列
数据结构·算法
minji...6 小时前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
罗湖老棍子6 小时前
最大数(信息学奥赛一本通- P1549)(洛谷-P1198)
数据结构·算法·线段树·单点修改 区间求最大值