当前位置: 首页 > news >正文

【LeetCode-中等题】90. 子集 II

文章目录

    • 组合+并集问题汇总:
    • 题目
    • 方法一:递归加回溯(去重版)

组合+并集问题汇总:

1、子集非去重版本
2、组合非去重版本
3、组合去重版本

题目

在这里插入图片描述
本题nums数组存在重复元素,所以本题会涉及一个去重操作:
子集无需去重版本:【LeetCode-中等题】78. 子集
组合去重版: 【LeetCode-中等题】47. 全排列 II

本题最大的不同就在于组合去重版收获结果是在递归结束末尾,而本题去重收获结果是在递归开始的时候,并且去重操作的条件都是一样的,区别就在于for循环 子集是从startIndex开始的,而 组合都是从0开始的

两者的代码对比
在这里插入图片描述

方法一:递归加回溯(去重版)

在这里插入图片描述

class Solution {
// 递归加回溯List<List<Integer>> res = new ArrayList<>();//最终结果集public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);//事先对数组进行排序List<Integer>  zres = new ArrayList<>();int startIndex = 0 ;int[] usered = new int[nums.length];//标记数组  0代表未使用   1 代表使用过了dfsback(nums,zres,startIndex,usered);return res;}public void  dfsback(int[] nums, List<Integer> zres,int startIndex,int[] usered){res.add(new ArrayList<>(zres));//收货结果if(startIndex >= nums.length) return ;for(int i = startIndex ; i<nums.length;i++){if(usered[i] == 1) continue;if(i > 0 &&nums[i-1] == nums[i] && usered[i-1] == 0) continue;//去重操作else{zres.add(nums[i]);usered[i] = 1;dfsback(nums,zres,i+1,usered);//下一层递归zres.remove(zres.size()-1);//回溯过程usered[i] = 0;}}}
}
http://www.lryc.cn/news/164166.html

相关文章:

  • Docker如何安装seafile
  • 注册法国商标的步骤和时间
  • 一起学数据结构(6)——栈和队列
  • 【数据结构】二叉树的顺序结构-堆
  • 2024年java面试--mysql(2)
  • IllegalArgumentException
  • Git 概述命令、idea中的使用
  • 单片机之硬件记录
  • QQ文件传输协议研究
  • Qt/C++音视频开发51-推流到各种流媒体服务程序
  • LeetCode 35. 搜索插入位置
  • 7年经验之谈 —— Web测试是什么,有何特点?
  • 【数据结构】前言概况 - 树
  • MySQL——事务
  • 虚拟机Ubuntu操作系统最基本终端命令(安装包+详细解释+详细演示)
  • Android 11.0 当系统内置两个Launcher时默认设置Launcher3以外的那个Launcher为默认Launcher
  • NO5.心愿打印机
  • cudart.so vs cuda.so的区别
  • Oracle集群管理-19C集群禁用numa和大页内存特性
  • 题目:2726.使用方法链的计算器
  • 基于ASP.NET的驾校管理系统设计与实现
  • 第一章 计算机系统概述 三、操作系统的发展与分类
  • 【2023年11月第四版教材】第12章《质量管理》(第二部分)
  • metinfo __ 6.0.0 __ file-read
  • 打造高效的私密论坛网站:Cpolar内网穿透+HadSky轻量级搭建指南
  • MediaCodec源码分析 configure流程
  • 借助ChatGPT使用Pandas实现Excel数据汇总
  • [学习笔记]PageRank算法
  • 【洛谷算法题】P5704-字母转换【入门1顺序结构】
  • Pytorch——查找、替换module相关操作