LeetCode-90-子集II 发表于 2020-03-22 | 分类于 LeetCode | 评论数: | 热度: ℃ 本文字数: 4.9k | 阅读时长 ≈ 4 分钟 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 12345678910输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []] Code123456789101112131415161718192021222324252627282930313233343536373839404142//注意理解去重的思路//time O(2^n)//space O(kn)class Solution {private: vector<vector<int>> res;public: //与无相同元素的区别: //添加了排序,并在同层使用第一个 vector<vector<int>> subsetsWithDup(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<int> temp; res.push_back(temp);//先将空集放入数组 if(nums.empty()) return res; //根据子集的长度递增的方式依次回溯求出 for(int i=1;i<=nums.size();i++) DFS(i,0,nums,temp); return res; } //参数 //集合长度 void DFS(int length ,int start ,vector<int>& nums ,vector<int>& temp){ if(length==0){ res.push_back(temp); return; } for(int i=start;i<nums.size();i++){ //同一层出现相同元素,只使用第一个,这样可以避免出现重复项,前提需要先对candidates排好序 if(i>start&&nums[i]==nums[i-1]) continue; temp.push_back(nums[i]); DFS(length-1,i+1,nums,temp); temp.pop_back(); } }}; 相关文章推荐 LeetCode-130-被围绕的区域 LeetCode-131-分割回文串 LeetCode-200-岛屿数量 LeetCode-216-组合总和III LeetCode-40-组合总和II ----\(˙<>˙)/----赞赏一下吧~ 打赏 微信支付 支付宝 本文作者: wicherQAQ 本文链接: https://wicherqaq.github.io/2020/03/22/LeetCode-90-%E5%AD%90%E9%9B%86II/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!