题目:子集

核心思路:枚举每一个位置,并通过递归调用进入下一个位置

具体实现:

每次进入回溯函数时,都先将当前保存的数组存入结果数组中,之后再进入具体的回溯算法——通过循环遍历当前元素之后的每一个元素,然后再递归调用相同函数,对下一个元素进行相同操作

 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}