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
相关推荐
2301_763472582 分钟前
实时系统下的C++编程
开发语言·c++·算法
张祥6422889042 分钟前
二次型:从线性代数到测量平差的桥梁
线性代数·算法·机器学习
im_AMBER3 分钟前
Leetcode 113 合并 K 个升序链表
数据结构·学习·算法·leetcode·链表
高洁016 分钟前
基于物理交互的具身智能决策框架设计
算法·机器学习·数据挖掘·transformer·知识图谱
REDcker6 分钟前
TCP 拥塞控制算法详解:CUBIC、BBR 及传统算法
tcp/ip·算法·php
偷吃的耗子20 分钟前
[CNN算法理解]:二、卷积层(从生活实例到技术细节)
算法·cnn·生活
2301_7903009621 分钟前
C++与Docker集成开发
开发语言·c++·算法
TracyCoder12321 分钟前
LeetCode Hot100(22/100)——141. 环形链表
算法·leetcode·链表
一起养小猫26 分钟前
Flutter for OpenHarmony 进阶:递归算法与数学证明深度解析
算法·flutter
赛博云推-Twitter热门霸屏工具26 分钟前
Twitter 搜索霸屏的关键词工程方法——从算法理解到赛博云推的系统化执行
算法·twitter·dreamweaver