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也讲过了,所以直接给出代码了: