题目描述
Given an integer array nums, return all possible subsets (the power set).
The solution set must not contain duplicate subsets.
Example 1:
Input: nums = [1,2,3]
Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
Example 2:
Input: nums = [0]
Output: [[],[0]]
Constraints:
- 1 <= nums.length <= 10
- -10 <= nums[i] <= 10
问题解决
我的解法
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> subsets = new ArrayList<Integer>();
public List<List<Integer>> subsets(int[] nums) {
res.add(new ArrayList<>(subsets));
helper(nums, 0);
return res;
}
public void helper(int[] nums, int from){
if(subsets.size() != 0)
res.add(new ArrayList<>(subsets));
for (int i = from; i<nums.length; i++){
subsets.add(nums[i]);
helper(nums, i+1);
subsets.remove(subsets.size()-1);
}
}
}
大佬解法
class Solution {
List<Integer> t = new ArrayList<Integer>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
dfs(0, nums);
return ans;
}
public void dfs(int cur, int[] nums) {
if (cur == nums.length) {
ans.add(new ArrayList<Integer>(t));
return;
}
t.add(nums[cur]);
dfs(cur + 1, nums);
t.remove(t.size() - 1);
dfs(cur + 1, nums);
}
}