90. Subsets II (Back-Track, DP)
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],
- []
- ]
思路: 对于重复了n次的字符,可以选择放入0,1,2...n个
- class Solution {
- public:
- vector<vector<int> > subsetsWithDup(vector<int> &S) {
- vector<vector<int>> result;
- vector<int> pre;
- if(S.size()==)
- return result;
- sort(S.begin(),S.end());
- result.push_back(pre);
- dfs(S,result,pre,);
- return result;
- }
- void dfs(vector<int> &S , vector<vector<int>> &result ,vector<int> pre , int depth)
- {
- if(depth == S.size()) return; //teminate condition
- int dupCounter = ;
- int dupNum = ;
- while(depth+ < S.size() && S[depth] == S[depth+]) //get duplicate times
- {
- depth++;
- dupNum++;
- }
- while(dupCounter++ <= dupNum) //push duplicate elements
- {
- pre.push_back(S[depth]);
- result.push_back(pre);
- dfs(S,result,pre,depth+);
- }
- dupCounter = ;
- while(dupCounter++ <= dupNum) //backtracking
- {
- pre.pop_back();
- }
- dfs(S, result,pre, depth+); //push none, dfs directly
- }
- };
思路II:DP,插入排序法增加元素。重复的元素要在一个for循环内插入,否则会导致subset有重复。
- class Solution {
- public:
- vector<vector<int>> subsetsWithDup(vector<int>& nums) {
- vector<vector<int>> ret;
- vector<int> retItem;
- ret.push_back(retItem);
- int size; //number of memebers in ret
- int count = ; //count the duplicate number
- sort(nums.begin(),nums.end());
- for(int i = ; i < nums.size(); i++){ //iterate the number to insert
- if(i < nums.size()- && nums[i+]==nums[i]){
- count++;
- continue;
- }
- size = ret.size();
- for(int j = ; j < size; j++){ //iterate current item in ret
- vector<int> newItem = ret[j];
- for(int k = ; k < count; k++){ //duplicate 1,2,...,count times
- newItem.push_back(nums[i]);
- ret.push_back(newItem);
- }
- }
- count = ;
- }
- return ret;
- }
- };
90. Subsets II (Back-Track, DP)的更多相关文章
- leetcode 78. Subsets 、90. Subsets II
第一题是输入数组的数值不相同,第二题是输入数组的数值有相同的值,第二题在第一题的基础上需要过滤掉那些相同的数值. level代表的是需要进行选择的数值的位置. 78. Subsets 错误解法: cl ...
- 78. Subsets(M) & 90. Subsets II(M) & 131. Palindrome Partitioning
78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: The solution ...
- 90. Subsets II
题目: Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
- 【LeetCode】90. Subsets II (2 solutions)
Subsets II Given a collection of integers that might contain duplicates, S, return all possible subs ...
- 【LeetCode】90.Subsets II
Subsets II Given a collection of integers that might contain duplicates, nums, return all possible s ...
- LeetCode Problem 90. Subsets II
python solution 123456789101112131415161718192021222324252627 class (object): def subsetsWithDup(sel ...
- 78. Subsets 90. Subsets II
1. Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset m ...
- Leetcode#90 Subsets II
原题地址 跟Subsets(参见这篇文章)类似. 但因为有重复元素,所以要考虑去重问题. 什么情况下会出现重复呢?比如S = {5, 5, 5},如果要选1个5,一共有C(3,1)=3种选法,即100 ...
- LeetCode 90. Subsets II (子集合之二)
Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...
随机推荐
- 实现斐波拉契数列的四种方式python代码
斐波那契数列 1. 斐波拉契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引 ...
- 2018.11.23 Cypress BLE module test
CYx63BPA BLE module IQC test guide Test Jig setting:1. Connect USB1 and USB2 with computer serial ...
- 解决Eclipse中文乱码的问题
注意:显示中文所有的编码方式主要是GBK和UTF-8,UTF-8是国际通用的中文编码标准,推荐使用. 一. 设置工作空间的编码 编辑器的编码会影响到所有的项目中的字符的显示,可以说是作用最为广泛的设置 ...
- 转: android之虚拟机访问tomcat服务器资源
最近在研究Android虚拟机访问tomcat服务器资源,所以找了个时间写下这篇博客和大家分享一下心得. 其实Android虚拟机访问tomcat服务器非常的简单,只要不要弄错IP地址就可以访问tom ...
- Win7系统Visual Studio 2013配置OpenCV3.1图文详解
Win7系统Visual Studio 2013配置OpenCV3.1图文详解 OpenCV3.1对硬件加速和移动开发的支持相对于老版本都有了较大改进,支持新的开发工具,更易于扩展,配置方式也比以前简 ...
- 回测框架pybacktest简介(一)
pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...
- I.MX6 Linux U-boot 环境变量解析
/********************************************************************************** * I.MX6 Linux U- ...
- UOJ117. 欧拉回路【欧拉回路模板题】
LINK 题目大意 就是让你对有向图和无向图分别求欧拉回路 非常的模板,但是由于UOJ上毒瘤群众太多了 所以你必须加上一个小优化 就是每次访问过一个边就把它删掉 有点像Dinic的当前弧优化的感觉 注 ...
- 自定义简单的struts2的s标签
一:自定标签前需要了解的知识: BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent ...
- C语言使用pthread多线程编程(windows系统)一
运行之前需要做一些配置: 1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可) http://sourceware.or ...