网站前台展示,推广代理公司,2022年一建考试最新消息,seo排名快速这道题与子集(力扣78)-CSDN博客 的区别就在于集合中的元素会重复#xff0c;那么还按照之前的代码来操作就会得到重复的子集#xff0c;因此这道题的重点就在于去重。需要注意的是#xff0c;这里的去重指的是在同一层递归中#xff0c;而在往下递归的子集中可以取重复的元…这道题与子集(力扣78)-CSDN博客 的区别就在于集合中的元素会重复那么还按照之前的代码来操作就会得到重复的子集因此这道题的重点就在于去重。需要注意的是这里的去重指的是在同一层递归中而在往下递归的子集中可以取重复的元素。那么具体是如何实现的呢其实用到的方法还是之前组合总和II(力扣40)-CSDN博客 这道题使用过的套路。额外注意的是我们一定要先记得将集合排序再使用这种去重方法。大家可以结合我下面的代码及详细注释理解此题。
代码及详细注释如下
class Solution {
public:vectorint path;vectorvectorint result;void backtracking(vectorint nums,int start,vectorint used){result.push_back(path);if(start nums.size()){return;}for(int i start;i nums.size();i){//去重操作if(i 0 nums[i] nums[i - 1] used[i - 1] 0){continue;}path.push_back(nums[i]);used[i] 1;backtracking(nums,i 1,used);path.pop_back();used[i] 0;}return;}vectorvectorint subsetsWithDup(vectorint nums) {path.clear();result.clear();sort(nums.begin(), nums.end()); // 去重需要排序vectorint used(nums.size(),0);backtracking(nums,0,used);return result;}
};