子集问题与组合问题不同的地方在于组合保存的是树的每一个叶子结点,而子集要保存树的每一个结点,反映到代码中就是每一次调用递归函数(产生新的分枝),就要保存当前中转栈(path)的值。此时每次递归的保存与返回条件(if...)就不是必须的了,我们只需要在for循环结束后加上一个return 就可以了。
我的代码:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
backTracking(nums,0);
return result;
}
vector<int> path;
vector<vector<int>> result;
void backTracking(vector<int> nums,int startIndex){
result.push_back(path);//第一次循环正好压入空集合
if(startIndex>=nums.size())//这个条件不写也可以
return;
for(int i=startIndex;i<nums.size();i++){
path.push_back(nums[i]);
backTracking(nums,i+1);
path.pop_back();
}
return ;
}
};