无重复子集问题求解

简介: 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

子集 II


问题描述


给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。


解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。原题链接


重复子集可以查看之前的博客子集问题


示例 1:


输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]


示例 2:


输入:nums = [0]
输出:[[],[0]]


解题思路


使用回溯算法,等于原始子集问题的去重处理,去除所有子集中的重复子集。


解题代码


vector<vector<int>> res;
 vector<int> temp;
 void backTracking(vector<int>& nums,int number,int index){
     if(temp.size()==number){
         res.push_back(temp);
         return ;
     }
     for(int i=index;i<nums.size();i++){
         if(i>index&&nums[i]==nums[i-1]){
             continue;
         }
         temp.push_back(nums[i]);
         backTracking(nums,number,i+1);
         temp.pop_back();
     }
     return ;
 }
 vector<vector<int>> subsetsWithDup(vector<int>& nums) {
     sort(nums.begin(),nums.end());
     for(int i=0;i<=nums.size();i++){
         backTracking(nums,i,0);
     }
     return res;
 }


最关键的是回溯算法里面的一下判断条件,将会直接避免重复的子集出现(去掉该条件就可以转化为有重复的子集求解):


if(i>index&&nums[i]==nums[i-1]){
    continue;
}


目录
相关文章
|
9月前
|
存储 算法 程序员
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
【算法训练-回溯算法 二】【子集组合问题】子集、组合、子集II、组合总和
78 0
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
378 0
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
存储 算法 PyTorch
pytorch 给定概率分布的张量,如何利用这个概率进行重复\不重复采样?
在 PyTorch 中,可以使用 torch.distributions.Categorical 来基于给定的概率分布进行采样。
1008 0
|
资源调度 算法 关系型数据库
概率图推断之变量消除算法
事实证明,推理是一项颇具挑战的任务。对于很多我们感兴趣的概率,要准确回答这些问题都是NP难题。至关重要的是,推理是否容易处理取决于描述概率的图的结构。尽管有些问题很难解决,我们仍然可以通过近似推理方法获得有用的答案。
287 0
概率图推断之变量消除算法
|
Java
【附录】概率基本性质与法则的推导证明
本文从概率论三大公理出发,推导证明概率基本法则。
175 0
【附录】概率基本性质与法则的推导证明
|
算法 内存技术
求组合数三种算法
求组合数三种算法
99 0
|
存储 算法
四式解决回溯算法:组合+组合总和
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
706 3
|
存储 算法
一文搞懂全排列、组合、子集问题
Hello,大家好,我是bigsai,long time no see!在刷题和面试过程中,我们经常遇到一些排列组合类的问题,而全排列、组合、子集等问题更是非常经典问题。本篇文章就带你彻底搞懂全排列!
224 0
一文搞懂全排列、组合、子集问题
|
算法
杭电oj HDOJ 2050 折线分割平面(递推)算法 数学逻辑(由分割平面转化而来)
杭电oj HDOJ 2050 折线分割平面(递推)算法 数学逻辑(由分割平面转化而来)
159 0
杭电oj HDOJ 2050 折线分割平面(递推)算法 数学逻辑(由分割平面转化而来)
①特征选取之单变量统计、基于模型选择、迭代选择
特征选取之单变量统计、基于模型选择、迭代选择
351 0
①特征选取之单变量统计、基于模型选择、迭代选择