# LeetCode 90. Subsets II

## Description

https://leetcode.com/problems/subsets-ii/description/

Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

For example,
If nums = `[1,2,2]`, a solution is:

```[
,
,
[1,2,2],
[2,2],
[1,2],
[]
]```

## Explanation

The problem is a follow-up question for Subset. Also, it is a typical depth-first search coding problem.

We can have a recursion function to add visited subsets to the final results. Remember to make a deep copy when we need to add the subset to the results.

We can skip visiting subset when we find that the next element value has the same value with the previous element.

## Java Solution

```class Solution {
public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> results = new ArrayList<>();

if (nums == null || nums.length == 0) {
return results;
}

Arrays.sort(nums);

List<Integer> subset = new ArrayList<>();
toFindAllSubsets(nums, results, subset, 0);

return results;
}

private void toFindAllSubsets(int[] nums, List<List<Integer>> results, List<Integer> subset, int startIndex) {