题目
给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
分析
代码
1 class Solution { 2 public: 3 vector<int>path; 4 vector<vector<int>>res; 5 6 void backtracking(vector<int>nums,int startIndex){ 7 res.push_back(path); 8 //每进行一次递归,要保存上一层递归结果,相当于在搜索树往下一层搜索时,要保存上层 9 if(startIndex == nums.size()) { 10 return; 11 } 12 for(int i = startIndex;i < nums.size();i++){ 13 path.push_back(nums[i]); 14 backtracking(nums,i+1); 15 path.pop_back(); 16 } 17 } 18 vector<vector<int>> subsets(vector<int>& nums) { 19 backtracking(nums,0); 20 return res; 21 } 22 };
总结
这是回溯问题的子集问题。基本还是想象搜索树的样子,模板来做。注意 在何处将结果存入 res中? 应该是回溯函数的顶部,因为要搜索到每一层要将结果存入,这点不同于之前回溯的组合、分割问题(它们是搜索的叶子结点再存放)。