Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- 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], [] ]
public class Solution { //DFS //注意:本题是要所有的组合,所以跟全排列的不同是,深搜的判断条件是只要符合要求的就加入最终结果 //注意递归函数中,getSub的参数意义:从start开始 //注意需要排序,题目暗含递增排序 //时间复杂度O(2^n),空间复杂度O(n) List<List<Integer>> res; List<Integer> seq; public List<List<Integer>> subsets(int[] nums) { res=new ArrayList<List<Integer>>(); seq=new ArrayList<Integer>(); Arrays.sort(nums);///////// getSub(nums,0,nums.length); return res; } public void getSub(int[] nums,int start,int end){ if(start<=end){/////// res.add(new ArrayList<Integer>(seq)); } for(int i=start;i<end;i++){ seq.add(nums[i]); getSub(nums,i+1,end);////// seq.remove(seq.size()-1); } } }