90. 子集 II

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

说明:解集不能包含重复的子集。

示例:输入: [1,2,2]
输出:
[[2],[1],[1,2,2],[2,2],[1,2],[]
]

解题思路:
跟我之前的上一道题目类似,也是递归调用,回溯算法。只不过多了重复问题,也就是【1,2,2】跟【2,1,2】是同一个元素,不能重复输出。

那么我们只需要把深度优先搜索的每层的数字先排序,也就是确保最后输出的结果是【1,2,2】跟【1,2,2】,然后再利用set去重就行了。
代码:

class Solution {public:vector<vector<int>> subsetsWithDup(vector<int>& nums) {vector<int> temp;vector<vector<int>> result;sort(nums.begin(),nums.end());   //首先要先把每层的数字先排序,就这样就可以排除先后相等的问题generate(0,nums,temp,result);    set<vector<int>> st(result.begin(), result.end());  //把有重复的结果放在set里,去重复result.assign(st.begin(), st.end());        //最后再把set里去重复的结果放回vector里return result;}
private://深度优先搜索void generate(int i,vector<int>&nums, vector<int> &temp, vector<vector<int>> &result){if(i==nums.size()){   result.push_back(temp);   return;}temp.push_back(nums[i]);generate(i+1,nums,temp,result);temp.pop_back();generate(i+1,nums,temp,result);}
};

LeetCode 90.子集 II 中等难度相关推荐

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

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

  2. leetcode 90. 子集 II 思考分析

    与本题相关联的题目解析: leetcode 78. 子集 思考分析 leetcode 40. 组合总和 II思考分析 题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集 ...

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

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

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

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

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

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

  6. [leetcode]90. 子集 II

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

  7. 回溯模板+leetcode——78. 子集 + 90. 子集 II

    回溯法 一般情况下,看到题目要求「所有可能的结果」,而不是「结果的个数」,我们就知道需要暴力搜索所有的可行解了,可以用「回溯法」. 「回溯法」实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻 ...

  8. 【暴力枚举】LeetCode 90. Subsets II

    LeetCode 90. Subsets II solution1和2均是利用set的,3和4是不利用set的 Solution1:我的答案 迭代法 class Solution { public:v ...

  9. leetcode系列-90.子集 II

    leetcode系列–第90题.子集 II 做此题之前务必先做 第78题题目描述: 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集). 解集 不能 包含重复的子 ...

最新文章

  1. NeHe OpenGL教程 第四十课:绳子的模拟
  2. 通过代码动态创建IIS站点
  3. h3c 3600 交换机配置Telnet登录
  4. 第四十七期:漫画:什么是公有云、私有云和混合云?
  5. centos8搭建nsis交叉编译环境
  6. postman压测_只会postman单接口测试?快看看这里
  7. 企业级的Java快速开发平台,首选iMatrix平台。
  8. 接口中定义的成员变量是( )。_C++:如何正确的定义一个接口类
  9. PCAN-Explorer5安装教程
  10. 量子笔记:酉矩阵(幺正矩阵)、量子门的可逆性
  11. 美国大学计算机理论专业phd,揭秘美国大学计算机专业PHD申请难度
  12. 在centos上安装pycharm
  13. 卢亮/明珠的博客吧开张了……
  14. anbox 使用情况_如何在Linux PC上启动并运行Anbox?
  15. 搭建asp会议签到系统:第一章 账密登录
  16. linux machine start,Linux中的MACH定义之MACHINE_START / MACHINE_END
  17. Eclipse安装PMD插件
  18. tqdm的使用和例子
  19. 2022-11-12-读书
  20. 阿里云服务器CentOs中安装elasticsearch7.13.1

热门文章

  1. 荣耀 6 安装 SD 卡,提示:SD卡已安全移除
  2. python3中,os.path模块下常用的用法总结
  3. strong与em、q、cite、blockquote区别
  4. PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP
  5. 没事试试50mm1.4
  6. 基于DirectX的游戏引擎-Xworld
  7. Linux下 数据文件 效验问题
  8. 软件开发人员真的了解SQL索引吗(索引使用原则)
  9. [代码笔记]VUE路由根据返回状态判断添加响应拦截器
  10. Android的px、dp和sp