DFS Subsets II
来源:互联网 发布:盈透证券开户 知乎 编辑:程序博客网 时间:2024/04/29 13:54
思想:
方法一:DFS+去重
直接在前一题的基础上进行修改,对结果集进行去重。
unique()用于删除相邻的重复元素;
resize()用于重置vector的大小;
class Solution {private: //Subsets II : DFS void dfs(const vector<int> &nums, int depth, vector<int> &path, vector<vector<int>> &res) { if(depth == nums.size()) { res.push_back(path); return; } path.push_back(nums[depth]); dfs(nums,depth+1,path,res); path.pop_back(); dfs(nums, depth+1, path, res); }public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int>> res; vector<int> path; dfs(nums,0,path,res); sort(res.begin(),res.end()); vector<vector<int>>::iterator it=unique(res.begin(),res.end()); res.resize(distance(res.begin(), it)); return res; }};
方法二:DFS
在每一层不选重复的元素,到下一层再去选,可以保证唯一。
比如:
location = [0,1,2]
elements = [1,1,1]
3个重复的元素,第0层只能控制第0位置的1选或者不选,第1位置的1和第2位置的1不能在第0层选。
同理,第1层只能控制第1位置的1选或者不选,第2位置的1要到下一层去选。
class Solution {private: //Subsets II : DFS void dfs(const vector<int> &nums,vector<int>::iterator start,vector<int> &path, vector<vector<int>> &res) { res.push_back(path); for(auto i = start; i < nums.end(); i++) { if(i != start && *i == *(i-1)) continue; path.push_back(*i); dfs(nums,i+1,path,res); path.pop_back(); } }public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int>> res; vector<int> path; dfs(nums,nums.begin(),path,res); return res; }};
0 0
- 【DFS】Subsets II
- leetcode dfs Subsets II
- DFS Subsets II
- LeetCode-90-Subsets II 暴力dfs回溯
- 【DFS】Subsets
- Subsets------DFS
- leetcode 90. Subsets II DFS深度优先搜索 + 全排列
- 【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
- 人生中处处都是创业经商,若不是,那代表着还没找到商业的秘密
- c# 计算器
- 非递归前序周游二叉树
- 从业经历回顾之TP-LINK
- 我的emacs配置说明
- DFS Subsets II
- 当前情况
- MYSQL 创建数据库
- 清除DataGridView中所有选中项目
- eclipse连接SQL Server2008 数据库 java
- 佳软周刊:不越狱?看看iOS8输入法有多开放
- OpenGL 基础篇
- thread runnable区别
- 免费注册winrar压缩软件消除弹窗广告方法