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 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:拼数
c++·算法·贪心·csp·信奥赛·排序贪心·拼数
炽烈小老头19 分钟前
【 每天学习一点算法 2026/04/21】螺旋矩阵
学习·算法
未来转换34 分钟前
基于A2A协议的生产应用实践指南(Java)
java·开发语言·算法·agent
谭欣辰1 小时前
AC自动机:多模式匹配的高效利器
数据结构·c++·算法
joker_sxj1 小时前
论文阅读-DeepSeek-mHC
论文阅读·算法
sheeta19981 小时前
LeetCode 每日一题笔记 日期:2026.04.21 题目:1722. 执行交换操作后的最小汉明距离
笔记·算法·leetcode
鲸渔1 小时前
【C++ 跳转语句】break、continue、goto 与 return
开发语言·c++·算法
AI科技星1 小时前
基于螺旋元逻辑的宇宙统一场论底层公理构建(乖乖数学)
算法·机器学习·数学建模·数据挖掘·量子计算
qiqsevenqiqiqiqi2 小时前
MC0550鱼肠剑试锋芒
数据结构·算法
仍然.2 小时前
算法题目---链表
数据结构·算法·链表