Leetcode Subsets II 有重复元素的组合
2013-12-29 08:00
363 查看
Subsets II
Given a collection of integers that might contain duplicates, S, return all possible subsets.Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If S =
[1,2,2],
a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
禁止重复,就使用set,map等容器,就可以很简单解决了。
class Solution { public: vector<vector<int> > subsetsWithDup(vector<int> &S) { sort(S.begin(), S.end()); vector<vector<int> > rs(1); vector<int> temp; set<vector<int> > us; us.insert(temp); for (int i = 0; i < S.size(); i++) { for (int j = rs.size()-1; j>=0; j--) { temp = rs[j]; temp.push_back(S[i]); rs.push_back(temp); us.insert(temp); } } rs.clear(); rs.assign(us.begin(), us.end()); return rs; } vector<vector<int> > subsetsWithDup2(vector<int> &S) { sort(S.begin(), S.end()); vector<vector<int> > rs(1); vector<int> temp; set<vector<int> > us; us.insert(temp); for (int i = 0; i < S.size(); i++) { for (int j = rs.size()-1; j>=0; j--) { temp = rs[j]; temp.push_back(S[i]); rs.push_back(temp); us.insert(temp); } rs.assign(us.begin(),us.end()); } return rs; } };
//2014-2-14 update vector<vector<int> > subsetsWithDup(vector<int> &S) { sort(S.begin(), S.end()); vector<vector<int> > rs(1); unordered_set<vector<int> > sv(rs.begin(), rs.end()); for (int i = 0; i < S.size(); i++) { for (int j = rs.size() - 1; j >= 0 ; j--) { rs.push_back(rs[j]); rs.back().push_back(S[i]); sv.insert(rs.back()); } rs.assign(sv.begin(), sv.end()); } return rs; }
相关文章推荐
- LeetCode Subsets II (带有重复元素的组合)
- 【LeetCode】Subsets_II 带重复元素的子集 - Medium
- Leetcode Remove Duplicates from Sorted List II 删除链表中重复的元素II
- [LeetCode] 219. Contains Duplicate II 包含重复元素 II
- LeetCode: Remove Duplicates from Sorted Array II(在排序数组中删除重复元素)
- LeetCode-Remove Duplicates from Sorted Array II (删除重复元素,使重复次数最多N次)
- Search in Rotated Sorted Array II 旋转数组(有重复元素)里找数@LeetCode
- Leetcode 78&90. Subsets I & II 【排列与组合的生成总结】
- 【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】
- Leetcode|Find Minimum in Rotated Sorted Array II(有重复元素的二分查找)
- LeetCode Contains Duplicate II (判断重复元素)
- Remove Duplicates from Sorted Array II 从有序数组里移除重复出现元素,最多重复出现2次 @LeetCode
- (Java) LeetCode 82. Remove Duplicates from Sorted List II —— 删除排序链表中的重复元素 II
- 154.leetcode Find Minimum in Rotated Sorted Array II(hard)[排序数组 重复元素 二分查找]
- 【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】
- LeetCode Remove Duplicates from Sorted Array II 删除整型数组中的重复元素并返回剩下元素个数2
- LeetCode | Remove Duplicates from Sorted Array II(删除重复的元素2)
- leetcode78、90-Subsets I/II(组合数/子集数目)
- leetcode 题解:Remove Duplicates from Sorted Array II(已排序数组去三次及以上重复元素)
- [LeetCode] Subsets I (78) & II (90) 解题思路,即全组合算法