class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>>result;
vector<int>path;
dfs(nums,path,0,result);
return result;
}
void dfs(vector<int>& nums, vector<int>&path,int step,vector<vector<int>>&result){
if(step==nums.size())
{
result.push_back(path);
return;
}
dfs(nums,path,step+1,result); //每次有插入和空两种情况;
path.push_back(nums[step]);
dfs(nums,path,step+1,result);
path.pop_back();
}
public:
vector<vector<int>> subsets(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<vector<int>>result;
vector<int>path;
dfs(nums,path,0,result);
return result;
}
void dfs(vector<int>& nums, vector<int>&path,int step,vector<vector<int>>&result){
if(step==nums.size())
{
result.push_back(path);
return;
}
dfs(nums,path,step+1,result); //每次有插入和空两种情况;
path.push_back(nums[step]);
dfs(nums,path,step+1,result);
path.pop_back();
}
};
第二种方法类似于排列组合
- class Solution {
- public:
- vector<vector<int> > subsets(vector<int> &S)
- {
- vector<vector<int> > result;
- vector<int> subset;
- sort(S.begin(),S.end());
- result.push_back(subset);
- DFS(S,0,subset,result);
- return result;
- }
- void DFS(vector<int> S , int start , vector<int> &subset , vector<vector<int> > &result)
- {
- if(start == S.size())
- {
- return;
- }
- for(int i = start ; i < S.size() ; i++)
- {
- subset.push_back(S[i]);
- result.push_back(subset);
- DFS(S,i+1,subset,result);
- subset.pop_back( );
- }
- }
- };