Leetcode Subsets II
来源:互联网 发布:淘宝刻章违法吗 编辑:程序博客网 时间:2024/06/16 16:17
题意:找到一个集合所有不一样的子集。
思路:暴力搜索。排序之后判断两个集合是否一样。
class Solution {public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { int mark = pow(2.0, nums.size()); vector<int> in; int iniin = 1; for(int i = 0; i < nums.size(); ++ i) { in.push_back(iniin); iniin <<= 1; } int ini = 0; vector<vector<int>> re; while(ini ^ mark) { vector<int> tempre; for(int i = 0; i < nums.size(); ++ i) { if(ini & in[i]) tempre.push_back(nums[i]); } ini ++; re.push_back(tempre); } vector<vector<int>> myre; for(int i = 0; i < re.size(); ++ i) { bool f = false; std::sort(re[i].begin(), re[i].end()); for(int j = 0; j < myre.size(); ++ j) if(isSame(myre[j], re[i])) f = true; if(f == false) myre.push_back(re[i]); } return myre; } bool isSame(vector<int> a, vector<int> b) { if(a.size() != b.size()) return false; for(int i = 0; i < a.size(); ++ i) { if(a[i] != b[i]) return false; } return true; }};
另一种方法是顺序插入,在原有的集合上出入新的元素得到新的集合,这是一种处理排列组合的常用方法。
class Solution {public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { vector<vector<int>> re = {{}}; std::sort(nums.begin(), nums.end()); for(int i = 0; i < nums.size();) { int count = 0; while(i + count < nums.size() && nums[i] == nums[i + count]) count ++; vector<int> temp; int size = re.size(); for(int j = 0; j < size; ++ j) { temp = re[j]; for(int k = 0; k < count; ++ k) { temp.push_back(nums[i]); re.push_back(temp); } } i += count; } return re; }};
0 0
- 【LeetCode】 Subsets Subsets II
- 【LeetCode】Subsets & Subsets II
- LeetCode Subsets && Subsets II
- LeetCode Subsets && Subsets II
- LeetCode-Subsets & Subsets II
- [LeetCode] Combinations、Subsets、Subsets II
- 【Leetcode】【python】Subsets/Subsets II
- LeetCode: Subsets II
- LeetCode SubSets II
- LeetCode: Subsets II
- leetcode 48: Subsets II
- [LeetCode] Subsets II
- [Leetcode] Subsets II
- [leetcode] Subsets II
- leetcode Subsets II
- leetcode Subsets II problem
- [LeetCode]Subsets II
- [leetcode]Subsets II
- Leetcode 394. Decode String
- one way of bitwise operation of C using struct
- Troubleshooting Segmentation Violations/Faults
- 纸上得来终觉浅,构建之法东北师大站2016秋季学期
- hdu 2066
- Leetcode Subsets II
- 【Linux Socket 编程入门】06 - 拉个骡子溜溜:UDP编程模型代码分析
- Leetcode 116. Populating Next Right Pointers in Each Node
- [051125]恋ももEternal Wish日文硬盘版[自带免CG存档+免安装补丁+日本语打开补丁]
- codeforces 758 D. Ability To Convert
- 新安装的oracle数据库在安装时忘记点击管理口令去设置权限了
- 《Large-Margin Softmax Loss for Convolutional Neural Networks》
- 求解,TortoiseGit与myeclipse的GIT插件区别
- LeetCode 186.Reverse Words in a String II