[LeetCode系列]子集枚举问题[有重复元素]

时间:2022-04-17 13:06:19

给定一组数(未排序, 可能有重复元素), 求出所有可能的组合.

算法和无重复元素的相似.

唯一需要注意的是, 如果当前的数字和之前的相同, 算法就只会在结尾数字是此数字的组合后加上此数字.

比如现在是[[] [1] [1 2] [2]], 当前数字是2, 就只会增加[1 2 2] [2 2]

代码:

 class Solution {
public:
vector<vector<int> > subsetsWithDup(vector<int> &S) {
sort(S.begin(), S.end());
vector<vector<int>> result();
int oldval=S[];
int oldj=;
for(int i=; i<S.size(); i++){
int temp=oldj;
if(S[i]!=oldval){
oldval=S[i]; temp=;
}
int j=result.size();
oldj=j;
while(j-->temp){
//note temp here help avoid creating duplicate subsets
result.push_back(result[j]);
result.back().push_back(S[i]);
}
}
return result;
}
};