Given a set of distinct integers, return all possible subsets.
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
Example
If S = [1,2,3]
, a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
Challenge :Can you do it in both recursively and iteratively?
思路:dfs
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> results=new ArrayList<>();
if(nums==null){
return results;
}
if(nums.length==0){
results.add(new ArrayList<Integer>());
return results;
}
Arrays.sort(nums);
helper(new ArrayList<Integer>(),nums,0,results);
return results;
}
private void helper(ArrayList<Integer> subset,int [] nums,int startIndex,List<List<Integer>> results){
results.add(new ArrayList<>(subset));
for(int i=startIndex;i<nums.length;i++){
subset.add(nums[i]); //例如[]->[1]
helper(subset,nums,i+1,results); //寻找所有以1开头的子集,并加入到results里,再同样做子任务
subset.remove(subset.size()-1);
}
}
}