90.子集II【回溯】

90.子集II

题目链接:https://leetcode-cn.com/problems/subsets-ii/

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:
输入: [1,2,2]
输出:
[[2],[1],[1,2,2],[2,2],[1,2],[]]

思路:
做本题之前一定要先做78.子集

这道题目和78.子集区别就是集合里有重复元素了,而且求取的子集要去重。

那么关于回溯算法中的去重问题,**在40.组合总和II(https://blog.csdn.net/coolshyman/article/details/120968828)中已经详细讲解过了,和本题是一个套路**

**后要讲解的排列问题里去重也基本是这个套路,所以理解“树层去重”和“树枝去重”十分重要**

用示例中的[1, 2, 2] 来举例,如图所示:(**注意去重需要先对集合排序**

从图中可以看出,同一树层上重复取2 就要过滤掉,同一树枝上就可以重复取2,因为同一树枝上元素的集合才是唯一子集!

本题就是其实就是78.子集(https://blog.csdn.net/coolshyman/article/details/121301461的基础上加上了去重,去重我们在40.组合总和II也讲过了,所以直接给出代码了:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值