
java
class Solution {
//盛放最终所有子集
List<List<Integer>> res = new ArrayList<>();
//盛放单个集合
List<Integer> path = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
backtrack(nums,0);
return res;
}
private void backtrack(int[] nums, int startIndex){
res.add(new ArrayList<>(path));
//从startIndex开始
for(int i = startIndex; i < nums.length; i++){
path.add(nums[i]);
//递归
backtrack(nums, i + 1);
path.remove(path.size() - 1);
}
}
}
子集回溯递归树:

这个递归函数中没有return,靠for循环里面的下标跳出循环。
可与上题全排列对比理解回溯算法。