# LeetCode 78. Subsets (Java)

## Description

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

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

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

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

## Explanation

The problem 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 subset to the results.

## Java Solution

```class Solution {
public List<List<Integer>> subsets(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) {