LeetCode | Subsets I,II
来源:互联网 发布:mysql scope identity 编辑:程序博客网 时间:2024/05/19 06:47
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3], a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
求一个数组的子集,使用递归的做法,使用一个临时数组【用于像栈一样】记录深搜的时候当前分支有多少个数组元素。
使用deep从0开始递增表示递归深度,当deep==nums.size()的时候为递归终点,此时将temp推入到result里面。
需要注意为了避免重复需要利用sort将数组进行排序。
class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<int> temp; vector<vector<int> > result; subsets(nums,temp,0,result); return result; } void subsets(vector<int>& nums,vector<int> & temp,int size,vector<vector<int> >& result){ if(size==nums.size()){ result.push_back(temp); return; } //不选当前元素 subsets(nums,temp,size+1,result); temp.push_back(nums[size]); subsets(nums,temp,size+1,result); temp.pop_back(); }};
II是I的升级版,这时候里面有重复元素。
于是就是一个判重问题。
主体代码完全相同
思考一下如何进行判重,如果有一个元素的长度同当前temp相等并且在比较相等的时候可以一直比较到最后一位。这时候表明这个元素是重复的,不应当推入。
class Solution {public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int> > result; vector<int> temp; subsets(nums,temp,0,result); return result; } void subsets(vector<int>& nums,vector<int> temp,int size,vector<vector<int> >& result){ if(size==nums.size()){ //插入元素的时候判重 int flag=0; for(int i=0;i<result.size();i++){ //首先判断长度 if(temp.size()!=result[i].size()) continue; //对于每一个判断每一个元素 int j=0; for(;j<result[i].size() && temp[j]==result[i][j];j++); if(j==result[i].size()){ flag=1;break; } } if(!flag) result.push_back(temp); return; } subsets(nums,temp,size+1,result); temp.push_back(nums[size]); subsets(nums,temp,size+1,result); temp.pop_back(); }};
0 0
- 【LeetCode】Subsets I && II
- [Leetcode]Subsets I&II
- LeetCode - Subsets I && II
- LeetCode | Subsets I,II
- LeetCode:Subsets I II
- leetcode -day31 Subsets I II
- LeetCode题解:Subsets I and II
- <LeetCode OJ> 78 / 90 Subsets (I / II)
- LeetCode 78, 90. Subsets i, ii
- [Leetcode] #78#90 Subsets I & II
- 【LeetCode】 Subsets Subsets II
- 【LeetCode】Subsets & Subsets II
- LeetCode Subsets && Subsets II
- LeetCode Subsets && Subsets II
- LeetCode-Subsets & Subsets II
- Subsets I, II
- 78. Subsets I & II
- [LeetCode] Combinations、Subsets、Subsets II
- Postgrel 数据库常用命令
- SDUTACM 数据结构实验之排序一:一趟快排
- 【HDU5823】color II(状压DP)
- 最长回文子串
- 本地运行hadoop-Failed to locate the winutils binary in the hadoop binary path
- LeetCode | Subsets I,II
- QGLWidget类
- chromium 安装flash-plugins 解决方案
- Java的反射机制
- C++学习笔记(一)
- Codevs 1035 火车停留 [费用流] [拆点]
- Android view背景动态改变带简单淡入淡出动画
- poj3260&&hdu3591 多重背包+完全背包
- 1023. Have Fun with Numbers (20)