难度:中等
频次:53
题目:
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
解题思路: 递归+回溯
递归解法注意:
- res添加temp在结束条件之前
- 通过层数判断结束条件
- 从左到有迭代
- temp添加元素
- 搜索下一层
- 回溯
递归回溯代码
class Solution {
List<List<Integer>> res=new ArrayList<List<Integer>>();
List<Integer> temp=new ArrayList<Integer>();
public List<List<Integer>> subsets(int[] nums) {
DFS(nums,0);
return res;
}
public void DFS(int[] nums,int start){
//temp是引用,所以必须转换成实体对象,不然为空
res.add(new ArrayList<>(temp));
//递归结束条件
if(start==nums.length){
return;
}
//迭代
for(int i=start;i<nums.length;i++){
//添加元素
temp.add(nums[i]);
//搜索下一层
DFS(nums,i+1);
//回溯-->把temp里的最后一个移除
temp.remove(temp.size()-1);
}
}
}