leetcode 40. 组合总和 II

news2024/11/25 22:44:27

2023.7.19

        此题为 组合总和 的升级版。本题的特殊之处在于 给定的candidates数组只一个无序且包含重复元素的数组,并且最终的解集不能包含重复的组合。

        所以本题的关键在于去重。那么,此类题的去重分为两种,一种是解集内部去重,灵一种是解集之间的去重

        解集内部去重指不允许存在诸如{1,1,6}的解集,本题题意说了,candidates中的每个数字在每个组合中只能使用一次,所以解集内部是需要去重的,去重方法在组合总和已经使用过,即在递归的时候,将start_index+1即可。有人可能会问示例中输出为什么有解集{1,1,6}? 那是因为candidates数组本身就存在重复的元素,也就是说两个1其实不是同一个1。

        解集之间去重指不允许存在{1,1,6}和{1,6,1}这样的重复解集,于是代码之中需要加一条去重的判断逻辑。 如果把回溯过程想象成树的话,那么解集之间去重就是指树的横切面不能有相同的元素。下面直接看代码:

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> path;
    void backtrating(vector<int> candidates,int target,int sum,int start_index)
    {
        if(sum == target)
        {
            ans.push_back(path);
            return;
        }
        if(sum > target) return;
        for(int i=start_index; i<candidates.size(); i++)
        {
            if(i>start_index && candidates[i]==candidates[i-1]) continue;//解集间去重

            path.push_back(candidates[i]);
            sum += candidates[i];
            backtrating(candidates,target,sum,i+1);//解集内部去重
            sum -= candidates[i];
            path.pop_back();
        }
    }
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        backtrating(candidates,target,0,0);
        return ans;
    }
};

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

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

相关文章

设计模式-享元模式在Java中的使用示例-围棋软件

场景 享元模式 简介 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 例如在一个文本字符串中存在很多重复的字符&#xff0c;如果每一个字符都用一个单独的对象来表示&#xff0c;将会占用 较多的内存空间…

【网络】网络编程套接字

目录 一、预备知识 1、网络通信理解 2、源IP地址和目的IP地址 3、端口号 二、网络字节序 三、socket编程接口 1、socket常见API 2、sockaddr结构 3、sockaddr结构体 3.1、sockaddr结构体 3.2、sockaddr_in结构体 四、简单的UDP网络程序 1、创建套接字接口 2、绑定…

C# OpenCvSharp 直方图均衡化 图像去雾

直方图 直方图均衡化 自适应的直方图均衡化 全局直方图均衡化 局部直方图均衡化 对比度调整 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; us…

TRT3-trt-basic - 5.1 封装插件

之前TRTbasic4是新增插件&#xff0c;这次我们看看不新增插件&#xff0c;仅凭封装可不可以达到一样的功能 首先可以看到这次的g.op不再是MYSELU了&#xff0c;而是plugin&#xff0c;那为什么.cu还能识别出来呢&#xff1f; 是因为在这里做了一个通用的plugin DEFINE_BUILTIN…

常用API学习03(Java)

String char charAt(int index) 返回char指定索引处的值 char[] toCharArray() 将此字符串转换为新的字符数组 int compareTo(String anotherString) 按字典顺序比较两个字符串 boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列才返…

osg osgQt模块 基于 QGLWidget 源码分析

osgQt基于QGLWidget实现了在Qt窗口内OSG渲染操作。Qt以其开源、跨平台、方便快捷、现代化的界面风格等优点&#xff0c;已经成为了目前桌面版CAD/CAE/CAM等软件开发的首选组件。因此&#xff0c;非常有必要在OSG的基础之上&#xff0c;研究Qt桌面系统内集成OSG渲染功能的相关技…

Linux查看机器内存空间

执行 fdisk命令查看磁盘空间 fdisk -l更多方法参考&#xff1a; Linux检查磁盘空间

一种工业机器人绝对精度的提升方法

摘要&#xff1a;一种新的校准方法&#xff0c;使用动作捕捉作为测量工具&#xff0c;利用ELM神经网络作为非几何误差源补偿&#xff0c;提升工业机器人的绝对精度。 工业机器人的绝对精度是评估其综合性能的重要指标之一。然而&#xff0c;由于机器人受到多种因素的影响&#…

概率论的学习和整理19:条件概率我知道,但什么是条件期望?---用来解决递归问题(草稿)

目录 1 目标问题&#xff1a; 什么是条件期望&#xff1f; 条件期望有什么用&#xff1f; 2 条件期望&#xff0c;全期望公式 3 条件期望&#xff0c;全期望公式 和 条件概率&#xff0c;全概率公式的区别和联系 3.1 公式如下 3.2 区别和联系 3.3 概率和随机过程 4 有什…

8年软件测试工程师感悟 —— 写给还在迷茫中的朋友

去年还在全网声讨互联网企业996呢&#xff0c;今年突然没声音了&#xff0c;也不用讨论在哪个路灯上吊死互联网资本家了&#xff0c;因为都被裁了。 继教育培训领域大幅度裁员之后&#xff0c;大厂裁员消息也开始陆续传出&#xff0c;百度AIG,MEG多条业务线进行精简&#xff0…

线程系列 3 - 关于 CompletableFuture

线程系列3-关于 CompletableFuture 1、从 Future 接口说起2、CompletableFuture 对 Future 的改进2.1、CompletionStage 接口类2.2、runAsync 和 supplyAsync 创建子任务2.3、 whenComplete 和 exceptionally 异步任务回调钩子2.4、调用 handle() 方法统一处理异常和结果2.5、异…

重温黑盒、白盒与灰盒测试方法

黑盒、白盒和灰盒测试方法是软件测试中常用的测试策略&#xff0c;用于评估系统的功能和质量。 对于黑盒、白盒与灰盒测试方法的理解&#xff0c;几年前我在某乎做过一个概念性的回答&#xff0c;当时提问者询问&#xff1a;如何跟非技术人员解释黑盒、白盒、灰盒测试的区别&a…

UG\NX二次开发 使用exception类,异常处理的方法

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介 异常处理是一种编程中常见的错误处理机制,它允许程序在遇到错误或异常情况时优雅地处理。在C++中,异常类是一种重要的异常处理工具。 当程序发生错误或异常时,我们可以使用excepti…

查看maven包依赖关系,一行命令搞定。

1&#xff1a;以logback-classic包为例&#xff0c;在命令端运行&#xff0c;下面命令 mvn dependency:tree -Dincludesch.qos.logback:logback-classic 2.会出现以下日志&#xff0c;就可以清楚的知道这个jar包&#xff0c;是在谁的下面。

python 批量下载图片(协程)

要下载的图片网站 1、总共多少页&#xff0c;得到每页的 url 列表 2、每页的图片详情的 ulr 列表&#xff08;因为该高清大图在图片详情页&#xff0c;因此需要去图片详情页拿图片的url) ​​​​​​​ 3、进入图片详情页&#xff0c;获取到图片url 然后下载。 完整代码如下&…

玩转代码|详细盘点JavaScript 数据类型

目录 什么是JavaScript JavaScript 拥有动态类型 JavaScript 字符串 JavaScript 数字 JavaScript 布尔 JavaScript 数组 JavaScript 对象 Undefined 和 Null JS 中如何判断 undefined JS 中如何判断 null 声明变量类型 什么是JavaScript JavaScript&#xff08;简称…

“nacos is starting with cluster”之nacos启动报错问题

下载并解压nacos后&#xff0c;通过点击startup.cmd启动nacos&#xff0c;出现nacos is starting with cluster的错误&#xff0c;导致nacos未能启动成功。 这是因为&#xff0c;通过startup.cmd命令启动nacos&#xff0c;默认是以集群的方式进行启动的&#xff0c;我们可以改…

为3.7亿用户提供优质服务的微众银行,如何保障应用安全、及时上线

微众银行成立于2014年&#xff0c;是国内首家数字银行。作为银行业改革创新的产物&#xff0c;开业八年多来&#xff0c;微众银行积极把握数字经济时代发展新机遇&#xff0c;运用科技手段为小微企业及普罗大众提供特色化、差异化的优质金融服务&#xff0c;在以数字普惠金融服…

地下供水管漏水监测-供水管道漏水监测设备

地下供水管道作为城市供水系统的重要组成部分&#xff0c;承载着为居民和企业提供清洁饮用水的重要使命。然而&#xff0c;由于管道老化、施工质量、外力损伤等因素&#xff0c;地下供水管道泄漏问题时有发生&#xff0c;这不仅造成了宝贵的水资源浪费&#xff0c;还会导致供水…

流程编排及可视化

写在前面 这里只介绍liteflow的简单基础使用以及作者对liteflow进行可视化扩展的相关阐述 一、背景及意义 背景&#xff1a;对于拥有复杂业务逻辑的系统承载着核心业务逻辑&#xff0c;这些核心业务逻辑涉及内部逻辑运算&#xff0c;缓存操作&#xff0c;持久化操作&#xf…