leetcode_90题——Subsets II (递推)
2015-06-04 16:14
477 查看
Subsets II
Total Accepted: 38124 Total Submissions: 138069My SubmissionsQuestion Solution
Given a collection of integers that might contain duplicates, nums, 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 nums =
[1,2,2], a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Hide Tags
Array Backtracking
这道题是78题的扩展,在这道题中,数字出现了重复的情况,所以需要处理这种情况,我的处理方式是,当出现重复数字时,记录下之前出现了多少次,在之前的那个李
只在那些次数和这个重复次数相同的里面插入新的数字。
#include<iostream> #include<vector> #include<set> #include<algorithm> using namespace std; multiset<int> tem1; //求下一个的值 vector<vector<int>> to_next(vector<vector<int>>& vec,vector<int>& vec1,int k) { vector<vector<int>> last=vec; if(tem1.count(vec1[k])==0)//没有重复数字的情况 { tem1.insert(vec1[k]); for(int i=0;i<vec.size();i++) { vec[i].push_back(vec1[k]); sort(vec[i].begin(),vec[i].end()); last.push_back(vec[i]); } } else//有重复数字的情况 { int L=tem1.count(vec1[k]);//之前这个数字出现了多少次 for(int i=1;i<vec.size();i++) { int flag=0; for(int j=0;j<vec[i].size();j++) { if(vec[i][j]==vec1[k]) flag++; } if(flag>=L)//只能选那些个数等于之前出现的次数的地方插入 { vec[i].push_back(vec1[k]); sort(vec[i].begin(),vec[i].end()); last.push_back(vec[i]); } } tem1.insert(vec1[k]); } return last; } //题目所需函数 vector<vector<int>> subsetsWithDup(vector<int>& nums) { vector<vector<int>> last; vector<int> t; last.push_back(t); for(int i=0;i<nums.size();i++) { last=to_next(last,nums,i); } return last; } int main() { vector<vector<int>> vec; vector<int> vec1; vec1.push_back(4); vec1.push_back(4); vec1.push_back(4); vec1.push_back(1); vec1.push_back(4); vec=subsetsWithDup(vec1); for(int i=0;i<vec.size();i++) { for(int j=0;j<vec[i].size();j++) cout<<vec[i][j]<<' '; cout<<endl; } }
相关文章推荐
- Xml转化为DataTable
- 使用Chrome测试页面响应性
- 利用百度SDK进行城市定位
- GRE填空中介词的常用搭配
- iOS应用架构谈 view层的组织和调用方案
- easyUI 1.3.2 dataGrid动态绑定列名和数据
- 黑马程序员_内存管理小结
- 修改 mysql 的字符编码
- Reverse Nodes in k-Group
- C# Lambda表达式
- Linux Shell常用技巧
- unity log写入文件
- 从零开始学习H5应用(1)——V1.0版,简单页面滑动切换效果
- Linux驱动开发必看详解神秘内核(完全转载)
- 新手易犯的典型缺陷--C#
- RTMP流媒体协议
- 指针高级(2)
- ECShop在PHP 5.4以上版本报错的解决
- ViewFlipper
- Redis3.0.1集群环境搭建