1 题目
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
Note: The solution set must not contain duplicate subsets.
Example:
Input: [1,2,2]
Output:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
2 尝试解
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>> result;
sort(nums.begin(),nums.end());
vector<int> temp;
add(result,temp,nums,0);
return result;
}
void add(vector<vector<int>>&result,vector<int>&temp,vector<int>&nums,int position){
if(position == nums.size()) {
result.push_back(temp);
return;
}
temp.push_back(nums[position]);
add(result,temp,nums,position+1);
temp.pop_back();
if(position > 0 && !temp.empty() && temp.back() == nums[position]) {
}
else{
add(result,temp,nums,position+1);
}
}
};
3 标准解
class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
vector<vector<int> > totalset = {{}};
sort(S.begin(),S.end());
for(int i=0; i<S.size();){
int count = 0; // num of elements are the same
while(count + i<S.size() && S[count+i]==S[i]) count++;
int previousN = totalset.size();
for(int k=0; k<previousN; k++){
vector<int> instance = totalset[k];
for(int j=0; j<count; j++){
instance.push_back(S[i]);
totalset.push_back(instance);
}
}
i += count;
}
return totalset;
}
};