一、题目
二、分析
对于普通的回溯问题,我们一般是在到达终止条件才把结果加入结果集,但是对于子集,我们的每一个节点,都是属于一个结果集,终止条件只是表示我们需要返回上一层。所以,这题的关键就是每一个节点,都把其加入到结果集。
三、代码
public class ZiJi {
@Test
public void test(){
int[] test={1,2,3};
subsets(test);
System.out.println(res);
}
List<List<Integer>> res=new ArrayList<>();//结果集
List<Integer> path=new ArrayList<>();//单个结果
public List<List<Integer>> subsets(int[] nums) {
backtracking(nums,0);
res.add(new ArrayList<>());
return res;
}
public void backtracking(int[] nums,int begin){
res.add(new ArrayList<>(path));//每个节点都收集
if(begin==nums.length){//返回
return;
}
for (int i = begin; i < nums.length; i++) {
path.add(nums[i]);
backtracking(nums,i+1);
path.remove(path.size()-1);
}
}
}