https://leetcode.cn/problems/subsets/description/

<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;
}