与本题相关联的题目解析:
leetcode 78. 子集 思考分析
leetcode 40. 组合总和 II思考分析

题目

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。

思考

在文章 leetcode 40. 组合总和 II思考分析
我们讲过去重的方法,分为树层去重和树枝去重。
首先根据例子画出解空间树草图:观察
发现,同一层重复取2就要过滤掉,同个树枝上是可以重复取相同元素的。这样就确定了去重条件,在层遍历的for循环中加入:

//如果遇到同一个集合的重复元素,跳过这个元素即可
if(i > startindex && candidates[i] == candidates[i-1]) continue;

在调用函数前要先对数组进行排序,使得重复的元素靠在一起,加速剪枝。

//排序加速剪枝
sort(candidates.begin(),candidates.end());

其余的思路和之前的leetcode 78. 子集 思考分析一样。

代码

class Solution {public:vector<vector<int>> result;vector<int> res;int floor=0;void backtracking(vector<int>& nums,int start,int end){result.push_back(res);//剩余集合为空,返回if(start==end){return;}for(int i=start;i<end;i++){if(i > start && nums[i] == nums[i-1]) continue;//cout<<nums[i]<<"层数:"<<floor<<endl;//处理结点;res.push_back(nums[i]);floor++;//递归,探索下一层backtracking(nums,i+1,end);      //递归floor--;//回溯,撤销处理结果res.pop_back();}return;}vector<vector<int>> subsetsWithDup(vector<int>& nums) {result.clear();res.clear();floor=0;//排序加速剪枝sort(nums.begin(),nums.end());backtracking(nums,0,nums.size());return result;  }
};

leetcode 90. 子集 II 思考分析相关推荐

  1. LeetCode 90.子集 II 中等难度

    90. 子集 II 题目: 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例:输入: [1,2,2] 输出: [[2],[1],[ ...

  2. leetcode 47. 全排列 II 思考分析

    题目 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列. 思考分析以及代码 这一题和前面的做过的两个题目有所关联: leetcode 46. 全排列 思考分析 再加上lee ...

  3. LeetCode 90. 子集 II【数组,回溯算法,排序去重】

    90. 子集 II 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.返回的解集中,子集可以按 任意顺序 排列. 示例 1: 输入 ...

  4. LeetCode 90. 子集 II(回溯+剪枝)

    文章目录 1. 题目信息 2. 解题 2.1 循环 2.2 回溯 1. 题目信息 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例 ...

  5. Leetcode 90. 子集 II 解题思路及C++实现

    解题思路: 经典的深度优先搜索问题. 这里,根据子集的元素个数 i ,分别进行 dfs .因为 nums 数组中有重复元素,所以在 dfs 程序中,需要有一个去重的判断. 判断逻辑为:当前元素与上一个 ...

  6. leetcode 90. 子集 II(回溯算法)

    给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子集.返回的解集中,子集可以按 任意顺序 排列. 示例 1: 输入:nums = [1 ...

  7. [leetcode]90. 子集 II

    bitmasking: 歪打正着,想着跟子集1(没有重复的元素)差不多,去下重就好了,然后没排序,然后就出现了重复的子集,然后排下序观察输出,然后就好了???,然后发现没排序重复是因为有的子集包含的元 ...

  8. leetcode 491. 递增子序列 思考分析

    题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 说明: 给定数组的长度不会超过15. 数组中的整数范围是 [-100,100]. 给定数组中可能包含重复数字 ...

  9. leetcode 122. 买卖股票的最佳时机 II 思考分析

    目录 题目 贪心法 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时 ...

最新文章

  1. Ricky’s RealDan’s Ricky
  2. 常用的rpm和yum的一些命令
  3. 自适应阈值化操作:adaptiveThreshold()函数
  4. Oracle中执行存储过程call和exec区别
  5. 计算机科学竞赛加拿大,滑铁卢大学计算机科学与数学竞赛最新考试时间!
  6. 通过fork进程爆破canary
  7. listview 样式 LVS_REPORT 与 LVS_EDITLABELS 编辑单元格时,当前行第一列内容不显示
  8. 数字图像处理基础知识总结
  9. PCL Lesson1 :PCL库PCLVisualizer的简单使用
  10. vb子程序未定义怎么改怎么办_vb中总提示子程序或函数未定义
  11. 基于javaSwing、MySQL的酒店客房管理系统(附源码)
  12. 分享一个Qt的pdf查看器
  13. 程序人生|毕业一年有感
  14. splunk篇5-导出csv文件中文乱码
  15. 商务英语:外企工作邮件常用100句
  16. JavaSE学习笔记 - 基础(1)
  17. 汽车标准:全球EMC试验标准汇总。
  18. 浅谈电机,如何选择步进电机的型号?
  19. 密码学-->buuctf 1~12
  20. 如何辨别该公司是不是培训机构的技巧

热门文章

  1. 【TypeScript系列教程05】保留关键字
  2. 轩逸车联网功能怎么用_北斗已建设完成,那“北斗导航”怎么用?“短报文功能”怎么用?...
  3. linux 命令 抛后台,Linux 后台执行命令
  4. java freemarker 分页_10小时入门java开发04 springboot+freemarker+bootstrap快速实现分页功能...
  5. android 自定义弹窗diss,Android中自定义PopupWindow,动态弹窗。
  6. Npm install failed with “cannot run in wd”
  7. web3.js_1.x.x--API(一)event/Constant/deploy/options
  8. nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP
  9. 有一本书,适合零到十年经验的程序员看
  10. 设计模式(二)模板方法模式