回溯算法:子集
思路:简单的回溯,认识本质之后,这就是一道模板题
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
vector<vector<int>> subsets(vector<int>& nums) {
int startIndex = 0;
res.push_back(path);
backtrack(nums, startIndex);
return res;
}
void backtrack(vector<int>& nums, int startIndex)
{
//if可以不需要,for循环就可以自动退出
if(startIndex >= nums.size())
return;
for(int i = startIndex; i < nums.size(); i++)
{
path.push_back(nums[i]);
res.push_back(path);
//递归进下一层循环
backtrack(nums, i + 1);
//回溯
path.pop_back();
}
}
};