题意:
给一组互不相同的数字,返回其所有子集(包括空和本身)
分析:
直接画搜索树,应该是:
null
1 2 3
2 3 3
3
每个结点到根的序列都是满足要求的子序列。
所以我们遍历的条件是遍历数组中大于本身结点的数。
public class Solution {
int[] nums;
List<Integer> l;
List<List<Integer>> list;
public List<List<Integer>> subsets(int[] nums) {
this.nums = nums;
l = new ArrayList<>();
list = new ArrayList<>();
list.add(l);
helper(0);
return list;
}
private void helper(int s){
if(s == nums.length){ //不满足条件的结点
return;
}
for(int i=s; i<nums.length; i++){
l.add(nums[i]);
list.add(new ArrayList(l));
helper(i+1); //递归的本质类似于循环(设置条件和递增)
l.remove(l.size()-1);
}
}
}