Subsets II
来源:互联网 发布:php小项目 编辑:程序博客网 时间:2024/05/19 23:04
方法1:按照Subsets I 的方法做,解出子集后去重
方法2:前一部分的解题思路和Subsets I一样,对于重复的元素,记录每个数字重复出现的次数,进行组合,例如对于1,2,2,由于2出现了两次,所以可能的组合是不选2,选一个2,选两个2,这样得到的结果就是 空集; 1 ; 2,; 1,2 ; 2,2; 1,2,2;
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; }};
方法3:通过判断条件进行复杂的分枝控制,在迭代过程中减掉重复的分枝
class Solution{public:void sub(vector<vector<int>> &ans, vector<int> &sets, vector<int> &A, int j) {if (j >= A.size()) {return;} for (int i = j; i<A.size(); i++) {if (i>j && A[i] == A[i - 1])continue;sets.push_back(A[i]); ans.push_back(sets);sub(ans, sets, A, i + 1);sets.pop_back();//利用出栈以及前面的if条件进行剪枝}}vector<vector<int>> subsetsWithDup(vector<int>& A) {vector<vector<int>> ans;vector<int> sets;sort(A.begin(), A.end());ans.push_back(sets);sub(ans, sets, A, 0);return ans;}};
0 0
- 【LeetCode】 Subsets Subsets II
- 【LeetCode】Subsets & Subsets II
- LeetCode Subsets && Subsets II
- Subsets and Subsets II
- LeetCode Subsets && Subsets II
- LeetCode-Subsets & Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- Subsets II
- 利用URL重写实现搜索分页
- AJAX
- Android 仿微信 录音获取录音文件 和录音时间 录音动画和 播放动画
- ofbiz 官网例子整理
- WebView 下拉刷新
- Subsets II
- svn 断开连接
- java中方法的参数的作用
- jQuery Raty - 不错的星级评分插件
- PAT乙级(Basic Level)1018(C++)
- 字符串长度及截取(中文2字符,英文1字符)
- hdu 5861 Road 线段树区间更新
- UVALive 3942 字典树板子
- 修改Eclipse中Servlet模板