第K次有n个集合, 第k+1次 即为在原有的每个集合中再插入一个数值然后再填入第K个集合中,即为第K+1,
当碰到重复元素时, 只需要对 前一次才加入的集合 增加其一个元素就好了
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
int size = nums.size();
if(size == 0)
return {};
sort(nums.begin(), nums.end());
vector<vector<int> > result(1);
// 放第一个
vector<int> help = {nums[0]};
result.push_back(help);
int before = 1;
int now = 2;
for(int i=1; i<size; ++i){
if(nums[i] == nums[i-1]){
int temp = now - before;
cout << temp << endl;
for(int j=before; j<now; ++j){
vector<int> v = result[j];
v.push_back(nums[i]);
result.push_back(v);
}
before = now;
now = now + temp;
}else{
for(int j=0;j<now;++j){
vector<int> v = result[j];
v.push_back(nums[i]);
result.push_back(v);
}
before = now;
now = now * 2;
}
}
return result;
}
};