78.子集
- 子集
难度中等549
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
回溯
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
//1.终止条件
if(nums == null) return result;
//2.递归
dfs(result,nums,new ArrayList<>(),0);
return result;
}
//回溯算法
private void dfs(List<List<Integer>> result,int [] nums,List<Integer> subResult,int index){
//1.终止条件
if(index == nums.length){
result.add(new ArrayList<Integer>(subResult));
return;
}
//2.not pick the number at this index
dfs(result,nums,subResult,index+1);
//3.add
subResult.add(nums[index]);
//4. pick the number at this index
dfs(result,nums,subResult,index+1);
//5.撤销
subResult.remove(subResult.size()-1);
}