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:

  1. [
  2. [2],
  3. [1],
  4. [1,2,2],
  5. [2,2],
  6. [1,2],
  7. []
  8. ]

思路: 对于重复了n次的字符,可以选择放入0,1,2...n个

  1. class Solution {
  2. public:
  3. vector<vector<int> > subsetsWithDup(vector<int> &S) {
  4. vector<vector<int>> result;
  5. vector<int> pre;
  6. if(S.size()==)
  7. return result;
  8. sort(S.begin(),S.end());
  9. result.push_back(pre);
  10. dfs(S,result,pre,);
  11. return result;
  12. }
  13. void dfs(vector<int> &S , vector<vector<int>> &result ,vector<int> pre , int depth)
  14. {
  15. if(depth == S.size()) return; //teminate condition
  16.  
  17. int dupCounter = ;
  18. int dupNum = ;
  19. while(depth+ < S.size() && S[depth] == S[depth+]) //get duplicate times
  20. {
  21. depth++;
  22. dupNum++;
  23. }
  24. while(dupCounter++ <= dupNum) //push duplicate elements
  25. {
  26. pre.push_back(S[depth]);
  27. result.push_back(pre);
  28. dfs(S,result,pre,depth+);
  29. }
  30. dupCounter = ;
  31. while(dupCounter++ <= dupNum) //backtracking
  32. {
  33. pre.pop_back();
  34. }
  35. dfs(S, result,pre, depth+); //push none, dfs directly
  36. }
  37. };

思路II:DP,插入排序法增加元素。重复的元素要在一个for循环内插入,否则会导致subset有重复。

  1. class Solution {
  2. public:
  3. vector<vector<int>> subsetsWithDup(vector<int>& nums) {
  4. vector<vector<int>> ret;
  5. vector<int> retItem;
  6. ret.push_back(retItem);
  7. int size; //number of memebers in ret
  8. int count = ; //count the duplicate number
  9.  
  10. sort(nums.begin(),nums.end());
  11.  
  12. for(int i = ; i < nums.size(); i++){ //iterate the number to insert
  13. if(i < nums.size()- && nums[i+]==nums[i]){
  14. count++;
  15. continue;
  16. }
  17.  
  18. size = ret.size();
  19. for(int j = ; j < size; j++){ //iterate current item in ret
  20. vector<int> newItem = ret[j];
  21. for(int k = ; k < count; k++){ //duplicate 1,2,...,count times
  22. newItem.push_back(nums[i]);
  23. ret.push_back(newItem);
  24. }
  25. }
  26. count = ;
  27. }
  28. return ret;
  29. }
  30. };

90. Subsets II (Back-Track, DP)的更多相关文章

  1. leetcode 78. Subsets 、90. Subsets II

    第一题是输入数组的数值不相同,第二题是输入数组的数值有相同的值,第二题在第一题的基础上需要过滤掉那些相同的数值. level代表的是需要进行选择的数值的位置. 78. Subsets 错误解法: cl ...

  2. 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 ...

  3. 90. Subsets II

    题目: Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...

  4. 【LeetCode】90. Subsets II (2 solutions)

    Subsets II Given a collection of integers that might contain duplicates, S, return all possible subs ...

  5. 【LeetCode】90.Subsets II

    Subsets II Given a collection of integers that might contain duplicates, nums, return all possible s ...

  6. LeetCode Problem 90. Subsets II

    python solution 123456789101112131415161718192021222324252627 class (object): def subsetsWithDup(sel ...

  7. 78. Subsets 90. Subsets II

    1. Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset m ...

  8. Leetcode#90 Subsets II

    原题地址 跟Subsets(参见这篇文章)类似. 但因为有重复元素,所以要考虑去重问题. 什么情况下会出现重复呢?比如S = {5, 5, 5},如果要选1个5,一共有C(3,1)=3种选法,即100 ...

  9. LeetCode 90. Subsets II (子集合之二)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...

随机推荐

  1. 实现斐波拉契数列的四种方式python代码

    斐波那契数列 1. 斐波拉契数列简介 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引 ...

  2. 2018.11.23 Cypress BLE module test

    CYx63BPA BLE module IQC test guide Test Jig setting:1.  Connect  USB1 and USB2 with computer serial ...

  3. 解决Eclipse中文乱码的问题

    注意:显示中文所有的编码方式主要是GBK和UTF-8,UTF-8是国际通用的中文编码标准,推荐使用. 一. 设置工作空间的编码 编辑器的编码会影响到所有的项目中的字符的显示,可以说是作用最为广泛的设置 ...

  4. 转: android之虚拟机访问tomcat服务器资源

    最近在研究Android虚拟机访问tomcat服务器资源,所以找了个时间写下这篇博客和大家分享一下心得. 其实Android虚拟机访问tomcat服务器非常的简单,只要不要弄错IP地址就可以访问tom ...

  5. Win7系统Visual Studio 2013配置OpenCV3.1图文详解

    Win7系统Visual Studio 2013配置OpenCV3.1图文详解 OpenCV3.1对硬件加速和移动开发的支持相对于老版本都有了较大改进,支持新的开发工具,更易于扩展,配置方式也比以前简 ...

  6. 回测框架pybacktest简介(一)

    pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...

  7. I.MX6 Linux U-boot 环境变量解析

    /********************************************************************************** * I.MX6 Linux U- ...

  8. UOJ117. 欧拉回路【欧拉回路模板题】

    LINK 题目大意 就是让你对有向图和无向图分别求欧拉回路 非常的模板,但是由于UOJ上毒瘤群众太多了 所以你必须加上一个小优化 就是每次访问过一个边就把它删掉 有点像Dinic的当前弧优化的感觉 注 ...

  9. 自定义简单的struts2的s标签

    一:自定标签前需要了解的知识: BodyTagSupport类的方法: 编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent ...

  10. C语言使用pthread多线程编程(windows系统)一

    运行之前需要做一些配置: 1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可)    http://sourceware.or ...