<aside> 💡
子集问题也可以理解为组合问题:组合问题完成整个数组的组合后才收集结果,子集问题对于每一步操作都收集结果
这题还有个比较巧妙的地方:i < nums.size()既是循环终止条件,也是递归终止条件(相当于startIndex == nums.size()时终止递归)
</aside>
vector<vector<int>> ans;
vector<int> path = {};
void backtracking(int startIndex, vector<int>& nums) {
// 没有终止条件,每个节点都收集结果
ans.push_back(path);
for (int i = startIndex; i < nums.size(); ++i) {
path.push_back(nums[i]);
backtracking(i + 1, nums);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(0, nums);
return ans;
}