78. 子集
回溯:
java
class Solution {
private List<List<Integer>> ans = new ArrayList<>();
private List<Integer> path = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
// 从索引 0 开始搜索
backtrack(nums,0);
return ans;
}
private void backtrack(int[] nums,int stratIndex){
//刚进去就加,避免漏
ans.add(new ArrayList<>(path));
//终止条件
if(stratIndex > nums.length-1){
return;
}
for(int i = stratIndex;i<nums.length;i++){
//在起始index上累加子集,1,12,123
path.add(nums[i]);
//回溯,起到1,12,123的效果
backtrack(nums,i+1);
//回溯删除
path.remove(path.size()-1);
}
}
}
时间复杂度:O(N*2^n)

空间复杂度:O(N)