原题链接:78.子集
思路:
先考虑终止条件
当startIndex这个枚举遍历大于nums.size()的数组长度时,则代表终止递归
然后就是for循环的横向遍历,每次将结点的值push进path中,然后进入一次递归就push进一次result中,因为要将所有可能的子集都收集
退出回溯时需要将path容器的元素pop_back
全代码:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex){
result.push_back(path);//放在终止条件的顶部,否则会漏掉
if(startIndex > nums.size())
{//startIndex 大于 数组的长度时,则代表终止递归
return ;
}
for(int i = startIndex; i < nums.size(); i++)
{
path.push_back(nums[i]);
backtracking(nums, i + 1);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
return result;
}
};