LeetCode讲解篇之90. 子集 II

文章目录

题目描述

题解思路

初始化一个变量start表示当前从哪里开始遍历nums

搜索过程的数字组合加入结果集

从start开始遍历nums

如果当前元素和前一个元素相等,前一个元素没被使用,则触发剪枝去重操作,跳过当次遍历

否则,将start赋值为当前元素的下一个,递归搜索,然后跳过重复的数字,进行剪枝

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

题解代码

python 复制代码
class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        start = 0
        res = []
        tmp = []
        n = len(nums)
        def dfs():
            nonlocal start
            res.append([num for num in tmp])
            i = start
            while i < n:
                start = i + 1
                tmp.append(nums[i])
                dfs()
                tmp.pop()
                while i < n - 1 and nums[i] == nums[i+1]:
                    i+=1
                i+=1
        dfs()
        return res
相关推荐
mmmmath_37 小时前
LeetCode.020.有效的括号
数据结构·算法·leetcode
Doubbbbbbble云8 小时前
算法优化中的数学建模与理论界限分析4
算法·数学建模
垆边人似月.8 小时前
华为机考题:字符个数统计
数据结构·算法·华为
en.en..8 小时前
Linux 进程退出exit(函数)
java·开发语言·算法
All for pursuit.8 小时前
【回溯-2】22.括号生成
数据结构·c++·算法·leetcode
longlongzihan8 小时前
LeetCode 1004.最大连续1的个数III 滑动窗口及动态规划题解
c++·算法·leetcode·dp·滑动窗口
朝朝辞暮i8 小时前
C++ 第 22 课:const —— 不允许随便修改的数据
开发语言·c++·算法
Chen—LSN9 小时前
数据结构——拿捏复杂度
java·c语言·开发语言·数据结构·经验分享·笔记·算法
Chen_harmony9 小时前
六、排序详解
c语言·数据结构·算法·排序算法
-dzk-9 小时前
【贪心算法】LC 55.跳跃游戏
算法·游戏·贪心算法