# 90. Subsets II

## 03 Jan 90. Subsets II

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:

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

Example 2:

```Input: nums = 
Output: [[],]
```

Constraints:

• `1 <= nums.length <= 10`
• `-10 <= nums[i] <= 10`

For every number in nums, we add it to every i in res. Ex. [[]], we add [] +  to res. The new res is [ [],  ]. Then add [] +  and  + , the new res is [[],,,[1,2]].

To void the duplicate, we check if i + [num] is already in res. So the iterate solution for Subsets II is:

``````def subsetsWithDup(self, nums):
res = [[]]
nums.sort()
for num in nums:
res += [ i + [num] for i in res if i + [num] not in res]
return res``````

class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
length = len(nums)
if length == 0:
return [[]]

results = [[]]
nums.sort()
for num in nums:
results = results + [ [num] + i for i in results if [num] + i not in results]

return results