求子集
思路一:(一切尽在调试中,一个一个的把它带出来,我不知道咋说,反正就是那么个意思,但要注意的是最先开始要给存放结果的vector一个空间)
class Solution
{
public:
vector<vector<int>> subsets(vector<int>& nums)
{
vector<vector<int>> res(1); //表示先开始的size为1
for(int i=0;i<nums.size();i++)
{
int size=res.size();
for(int j=0;j<res.size();j++)
{
vector<int> tmp=res[j];
tmp.push_back(nums[i]);
ret.push_back(tmp);
}
}
return ret;
}
};
思路二:回溯(这几天看到回溯看得我脑瓜子疼)
class Solution
{
public:
vector<vector<int>> subsets(vector<int>& nums)
{
vector<vector<int>> res;
vector<int> v;
dfs(res, 0, nums, v);
return res;
}
void dfs(vector<vector<int>>& res, int start, vector<int>& nums, vector<int> &v)
{
res.push_back(v);
for (int i = start; i < nums.size(); i++)
{
v.push_back(nums[i]);
dfs(res, i + 1, nums, v);
v.pop_back();
}
}
};