Description
Given a set of distinct integers, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: nums = [1,2,3]
Output:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
Analysis:
- Give an array
num
whose length isn
, then we use a recursion to get alist
which contains all the subsets of a set which contains the firstn-1
elements ofnum
. - Deepcopy each element of the
list
and adda[n]
to the element to construct a new element, then add this new constructed element to thelist
. - The
list
which contains all the subsets ofnum
is the final solution to the problem.
Example:
1.Given an array:
num = [1, 2, 3]
2.Get a list which contains all the subsets of [1,2]:
list = [[], [1], [2], [1,2]]
3.Deepcopy each element of the list and add a[n]
to the element to construct a new element:
list = [[], [1], [2], [1,2], [3], [1,3], [2, 3], [1,2,3]]
Code:
class Solution {
public List<List<Integer>> subsets(int[] nums) {
if(nums.length == 0) {
List<List<Integer>> rs = new ArrayList<>();
rs.add(new ArrayList<Integer>());
return rs;
}else {
List<List<Integer>> rs = subsets(Arrays.copyOfRange(nums, 0, nums.length-1));
int size = rs.size();
for(int i = 0; i < size; i++) {
List<Integer> newList = new ArrayList<>(rs.get(i));
newList.add(nums[nums.length-1]);
rs.add(newList);
}
return rs;
}
}
}