题目:子集
核心思路:枚举每一个位置,并通过递归调用进入下一个位置
具体实现:
每次进入回溯函数时,都先将当前保存的数组存入结果数组中,之后再进入具体的回溯算法——通过循环遍历当前元素之后的每一个元素,然后再递归调用相同函数,对下一个元素进行相同操作
1void backTrack(vector<int>& nums, vector<vector<int>>& res, vector<int>& temp, int start)
2{
3 res.emplace_back(temp);
4 for(int i = start; i < nums.size(); i++)
5 {
6 temp.push_back(nums[i]);
7 backTrack(nums, res, temp, i + 1);
8 temp.pop_back();
9 }
10}
11vector<vector<int>> subsets(vector<int>& nums)
12{
13 vector<vector<int>> res;
14 vector<int> temp;
15 res.reserve(1 << nums.size());
16 backTrack(nums, res, temp, 0);
17 return res;
18}