Problem

Given an integer array nums that may contain duplicates, return all possible subsets (the power set).
The solution set must not contain duplicate subsets. Return the solution in any order.

Example 1:

  1. Input: nums = [1,2,2]
  2. Output: [[],[1],[1,2],[1,2,2],[2],[2,2]]

Example 2:

  1. Input: nums = [0]
  2. Output: [[],[0]]

Solution

本题和第78题不一样的是,nums中可能有重复的元素,所以我们要考虑如何结果子集不要有重复对象。

解决办法是

  1. 先把元素都排序
  2. 如果选择跳过一个元素,就跳过接下来所有的相同元素。
    1. 如果不跳过的,重复的元素,每次都可能被单独加入一次。
    2. 所以这个操作是为了,重复的元素,只能分别
      1. 只出现一次,就是在遇到第一个元素的时候,被加入的
      2. 只出现两次,在遇到第一个,第二个

以【2,2,2】为例:

  1. 【2】是index = 0的元素,而不会是index=0被跳过,index=1被加入子集
  2. 同理,【2,2】是 index =0、1,而不可能是index =2、3

90. Subsets II - 图1