Iterative

vector<vector<int>> subsets(vector<int>& nums) {

vector<vector<int>> ret(1);//空集

sort(nums.begin(), nums.end());

for(int i=0;i<nums.size();++i){

int len= ret.size();//ret size一直在变 必须要先算出长度!

for(int j=0;j<len;++j){

vector<int> path=ret[j];

path.push_back(nums[i]);

ret.push_back(path);

}

}

return ret;

}

Subsets II

//有无重复都可以用的方法

class Solution {

public:

vector<vector<int>> ret;

vector<int> path;

vector<vector<int>> subsetsWithDup(vector<int>& nums) {

sort(nums.begin(), nums.end());

helper(nums,0);

return ret;

}

void helper(vector<int>& nums, int begin){

ret.push_back(path);

for(int i=begin;i<nums.size();++i){

if(i!=begin&&nums[i]==nums[i-1]) continue;

path.push_back(nums[i]);

helper(nums,i+1);

path.pop_back();

}

}

};

Last updated

Was this helpful?