problem:
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
本题求所有的子集,和上一题一样,思路是使用dfs算法,依照上一题修改一下添加循环即可。
class Solution {
public:
void dfs(vector<vector<int> >& result, vector<int> mynums, vector<int>& temp, int start, int left)
{
if(left == 0)
{
result.push_back(temp);
return;
}
int length = temp.size();
for(int i=start; i<=(mynums.size()-left); i++)
{
int test0 = length-left;
temp[length-left] = mynums[i];
int test1 = temp[length-left];
dfs(result, mynums, temp, i+1, left-1);
}
}
void combine(vector<vector<int> >& result, vector<int> mynums, int k) {
//create array
if(mynums.size()!=0 && k!=0)
{
vector<int> temp(k, 0);
dfs(result, mynums, temp, 0, k);
}
}
vector<vector<int> > subsets(vector<int>& nums) {
vector<vector<int> > result;
vector<int> zero;
result.push_back(zero);
for(int k=1; k<=nums.size(); k++)
{
combine(result, nums, k);
}
return result;
}
};