【LeetCode-中等题】40. 组合总和 II

文章目录

    • 题目
    • 方法一:递归+回溯+去重

题目

在这里插入图片描述

本题需要注意的就是去重操作因为nums数组里面的元素可能存在重复:
不重复的版本:【LeetCode-中等题】39. 组合总和 不去重版

方法一:递归+回溯+去重

参考讲解视频—回溯算法中的去重,树层去重树枝去重,你弄清楚了没?| LeetCode:40.组合总和II
在这里插入图片描述

class Solution {// 递归+ 回溯 candidates 有重复元素  加入标志数组考虑去重List<List<Integer>> res = new ArrayList<>();//最终结果集int len = 0;//数组长度public List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates);//对数组排序len = candidates.length;List<Integer> zres = new ArrayList<>();//子结果集int sum = 0;  //初始为0int[] flag = new int[len];//设置 标志位  去重int startIndex = 0; //设置遍历开始位置  使得每次只能取自己和自己之后的数组成子结果 避免重复子集dfsback(candidates,zres,sum,target,startIndex,flag);return res;}public void dfsback(int[]candidates, List<Integer> zres,int sum,int target,int startIndex, int[] flag){if(sum == target){res.add(new ArrayList<>(zres));//如果sum == target 收获节点的子集合  再往下遍历肯定大于target  所以直接returnreturn;}if(sum > target) return; //如果sum都大于target  后面就无需遍历了for(int i = startIndex ; i <len ;i++){//题目说同一个 数字可以 无限制重复被选取 那每次遍历都可以从他自己startIndex开始取到数组尾吧       if(flag[i] == 1) continue;if(i>0 && candidates[i] == candidates[i-1] && flag[i-1] == 0) continue;//树层去重  若for循环 后面一个元素和前面一个相同,并且前面一个元素的标志位为0 则执行去重操作,跳过以此元素进行的递归层sum += candidates[i];flag[i] = 1;zres.add(candidates[i]);dfsback(candidates,zres,sum,target,i,flag);//往下递归   这里的i是为了  往下面递归不能取数组前面 的数,不然会出现重复子集  [2,2,3],[2,3,2],[3,2,2]sum -= candidates[i];//回溯复原原值flag[i] = 0;zres.remove(zres.size()-1);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入了解苹果证书及其分类,提升iOS应用开发效率

目录 1. 企业证书 2. 开发者证书 开发证书&#xff1a; 发布证书&#xff1a; 3. 推送证书 4. 分发证书 5. MDM证书 摘要&#xff1a;本文将详细介绍苹果证书的作用及分类&#xff0c;包括企业证书、开发者证书、推送证书、分发证书和MDM证书&#xff0c;帮助开发者了解…

04-Apache Directory Studio下载安装(LDAP连接工具)

1、下载 官网下载Apache Directory Studio 注意Apache Directory Studio依赖于jdk&#xff0c;对jdk有环境要求 请下载适配本机的jdk版本的Apache Directory Studio,下图为最新版下载地址 Apache Directory Studio Version 2.0.0-M16 基于 Eclipse 2020-12&#xff0c;最低要…

C#使用Panel

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System

CVE-2023-20883 拒绝服务攻击

在Spring Boot版本3.0.0-3.0.6、2.7.0-2.7.11、2.6.0-2.6.14、2.5.0-2.5.14和不受支持的旧版本中&#xff0c;如果将Spring MVC与反向代理缓存一起使用&#xff0c;则可能会发生拒绝服务&#xff08;DoS&#xff09;攻击 一、影响范围 Spring Boot 3.0.x版本&#xff1a;3.0.0…

AJAX学习笔记2发送Post请求

AJAX学习笔记1发送Get请求_biubiubiu0706的博客-CSDN博客 继续 AJAX发送POST请求 无参数 测试 改回来 测试 AJAX POST请求 请求体中提交参数 测试 后端打断点 如何用AJAX模拟form表单post请求提交数据呢&#xff1f; 设置请求头必须在open之后,send之前 请求头里的设置好比…

mysql8 Found option without preceding group错误

这个错误说起来是真的坑&#xff0c;今晚帮同学在window操作系统上安装mysql8当自定义my.ini文件的时候 就出现一下错误&#xff0c;死活启动不起来 一直报错。当删掉这个my.ini文件的时候却能启动&#xff0c;刚开始以为是my.ini里的配置选项不对&#xff0c;一个一个筛查后依…

Mysql 备份与恢复

日志 MySQL 的日志默认保存位置为 /usr/local/mysql/data 常见的日志 错误日志&#xff1a;mysql本身启动&#xff0c;停止&#xff0c;运行期间发生的错误信息一般查询日志二进制日志&#xff1a;用于基于日志形式的数据恢复。用于主从复制&#xff0c;实现主从同步&#xf…

赛宁网安有力保障淮安市网络安全技能竞赛决赛

9月6日&#xff0c;由中共淮安市委网信办、淮安市总工会、淮安市人社局、淮安市教育局、淮安市公安局、共青团淮安市委共同主办&#xff0c;淮阴工学院协办&#xff0c;淮安市网络信息和数据安全协会、淮安市信息安全等级保护工作协调小组办公室承办&#xff0c;中国电信股份有…

2023年MySQL实战核心技术第一篇

目录 四 . 基础架构&#xff1a;一条SQl查询语句是如何执行的&#xff1f; 4.1 MySQL逻辑架构图&#xff1a; 4.2 MySQL的Server层和存储引擎层 4.2.1 连接器 4.2.1.1 解释 4.2.1.2 MySQL 异常重启 解决方案&#xff1a; 4.2.1.2.1. 定期断开长连接&#xff1a; 4.2.1.2.2. 初始…

EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!

作者 &#xff1a;wuziheng 背景介绍 最近&#xff0c;基于生成式AI技术批量产出真/像/美的个人写真应用非常受欢迎。同时&#xff0c;随着 Stable Diffusion 领域开源社区的快速发展&#xff0c;社区也涌现了类似 FaceChain 的开源项目&#xff0c;帮助开发者开发个性化的真…

docker-compose 部署 Seata整合nacos,Postgresql 为DB存储

docker-compose 部署 Seata整合nacos,Postgresql 为DB存储 环境 详情环境可参考 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 我这里 <spring.cloud.alibaba-version>2021.1</spring.cloud.alibaba-version>所…

高压放大器在机械制造领域的应用有哪些

在机械制造领域&#xff0c;高压放大器扮演着至关重要的角色。它们被广泛应用于各种机械设备和系统中&#xff0c;提供高压力、高精度的电信号放大。下面安泰电子将详细介绍高压放大器在机械制造领域的几个关键应用。 材料测试和强度试验 高压放大器广泛应用于材料测试和强度试…

基于Python开发的DIY字符画程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的DIY字符画程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…

Java8-17 --- 方法引用和构造器

一、方法引用 方法引用作为了函数式接口的实例 二、格式 函数式接口中的抽象方法a与其内部实现时调用的对象的某个方法b的形参列表和返回值类型都相同。可以考虑使用方法b实现对方法a的替换、覆盖。 注意&#xff1a;此方法b是非静态的方法&#xff0c;需要对象调用 /*** …

I.MX RT1176笔记(9)-- 程序异常追踪(CmBacktrace 和 segger rtt)

前言 在使用 ARM Cortex-M 系列 MCU时候&#xff0c;有时候会遇到各种异常&#xff08;Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault&#xff09;&#xff0c;这时候我们根据经验查询PC指针&#xff0c;LR寄存器&#xff0c;堆栈数据定位地址然…

Apache Tomcat漏洞复现

文章目录 弱口令启动环境漏洞复现 本地文件包含启动环境漏洞复现 弱口令 启动环境 来到vulhub/tomcat/tomcat8/靶场 cd vulhub/tomcat/tomcat8/安装环境并启动&#xff1a; sudo docker-compose up -d && sudo docker-compose up -d修改端口后启动&#xff1a; su…

shell逐行读取文件

shell逐行读取文件 方式1: whileread命令 有可能漏最后一行 while read line; doecho $line; done < tmp3.txt方式2: cat命令 可能问题&#xff1a;读取时同一行有空格时&#xff0c;会按空格分隔成两行 for line in $(cat itemIds.txt); doecho $linedone方式3:重定向…

机器学习——boosting之XGBoost(未完)

划水一整天&#xff0c;模型看了仨&#xff01;不错&#xff0c;虽然现在在打哈欠&#xff0c;还是很想把XGBoost梳理梳理 先从名字开始 XGBoost&#xff0c;eXtreme Gradient Boosting: em。。。。不理解 书上说&#xff0c;XGBoost有很好的性能&#xff0c;在各大比赛中大放异…

2023高教社杯 国赛数学建模E题思路 - 黄河水沙监测数据分析

1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

JavaScript-----DOM元素

目录 前言&#xff1a; 1. DOM介绍 2. 获取节点 3. 操作HTML内容 4. 监听事件 案例 5. 操作节点的标签属性 6. 操作样式 7. 创建、添加、删除节点 前言&#xff1a; 在此之前我们要想去操作网页元素一般是去通过CSS选择器实现的&#xff0c;今天我们就学习JavaScript里…