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?