这道题是给出一个数组,写出他的所有子集合。
一开始我的想法是,子集合里存放的数字个数可能是0个,1个,2个...n个,针对这n+1种可能,每一种分别求。但是没有调出来。后来看了别人代码,发现不用这么麻烦,每次递归都往结果集里加就可以。
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> r;
backtracking(res, nums, r, 0);
return res;
}
void backtracking(vector<vector<int>>& res, vector<int>& nums, vector<int>& r, int level)
{
res.push_back(r);
for(int i = level; i < nums.size(); ++i)
{
r.push_back(nums[i]);
backtracking(res, nums, r, i+1);
r.erase(--r.end());
}
}
};