leetcode40. 组合总和 II (java-回溯算法)

news2024/11/24 21:07:10

组合总和 II

  • leetcode40. 组合总和 II
    • 题目描述
    • 解题思路
    • 代码演示
  • 回溯算法专题

leetcode40. 组合总和 II

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/combination-sum-ii

题目描述

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用 一次 。
注意:解集不能包含重复的组合。

示例 1:
输入: candidates = [10,1,2,7,6,1,5], target = 8,
输出:
[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

示例 2:
输入: candidates = [2,5,2,1,2], target = 5,
输出:
[
[1,2,2],
[5]
]

提示:
1 <= candidates.length <= 100
1 <= candidates[i] <= 50
1 <= target <= 30

解题思路

这题还是和子集问题是相同的求解套路,我们只要子集的一部分,
关于子集的解法,查看leetcode78 子集
我们是要子集中的一部分符合,和为target 的子集,因此我们只要加入判断就行了。
但是这里有个问题,就是重复值的问题,如果值有重复的,我们要进行减枝。
在这里插入图片描述
重复的2 我们就不进行重复选择了,进行剪枝,代码里就是,我们先对数组排序,让相等的两个数相邻,然后递归时,判断已经选择过,就跳过。

代码演示

class Solution {
    List<List<Integer>> ans = new LinkedList<>();
    LinkedList<Integer> track = new LinkedList<>();
    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
    	//先对数组排序,方便剪枝
        Arrays.sort(candidates);
        process(candidates,0,target);
        return ans;
    }
	/**
	* 回溯算法,
	*/
    public void process(int[]candidates,int index,int target){
        //base case 小于0 前面选择无效,直接返回
        if(target < 0){
            return ;
        }
        //base case target == 0 ,选择是有效的,加入到目标集合里
        if(target == 0){
            ans.add(new LinkedList<>(track));
        }
        //越界时,直接返回。
        if(index == candidates.length){
            return;
        }
        //可以选择的列表
        for(int i = index;i < candidates.length;i++){
        	//剪枝操作,已经选择过的数字,不在进行重复选择
            if(i > index && candidates[i] == candidates[i - 1]){
                continue;
            }
            track.addLast(candidates[i]);
            //选择以后,目标数字减去选择的
            process(candidates,i + 1,target - candidates[i]);
            track.removeLast();
        }
    }
}

回溯算法专题

leetcode78 子集

leetcode77. 组合

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

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

相关文章

【滤波】扩展卡尔曼滤波器

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第11章节11-Extended-Kalman-Filters&#xff08;扩展卡尔曼滤波&#xff09;。 %matplotlib inline#format the book import book_format book_format.set_style()我们发展了线性卡尔曼滤波器的理论。然后在上两…

Fiddler之日常使用简介

目录 前言&#xff1a; Fiddler界面简介 一、Fiddler抓取http、https请求配置 二、抓取指定域名会话 三、http请求统计试图 前言&#xff1a; Fiddler是一款功能强大的Web调试工具&#xff0c;它可以帮助开发人员在开发和测试过程中捕获、修改和检查HTTP请求和响应。 使用Fiddl…

Python基础(11)——Python循环(while、for)

Python基础&#xff08;11&#xff09;——Python循环&#xff08;while、for&#xff09; 文章目录 Python基础&#xff08;11&#xff09;——Python循环&#xff08;while、for&#xff09;目标一. 循环简介1.1 循环的作用1.2 循环的分类 二. while的语法2.1 快速体验 三. w…

全球开源 AI 游戏开发挑战赛,只等你来!

我们在之前的文章中 预告过 (*划重点&#xff0c;IP 属地法国)&#xff1a;7 月初&#xff0c;我们将举办一次与 AI 游戏相关的黑客松活动&#xff0c;这是有史以来的首次开源游戏开发挑战赛&#xff0c;借助人工智能工具释放你的创造力&#xff0c;一起打破游戏开发的边界。 比…

Python自动化测试 软件测试最全教程(附笔记),看完就可就业

最近看到很多粉丝在后台私信我&#xff0c;叫我做一期Python自动化测试的教程&#xff0c;其实关于这个问题&#xff0c;我也早就在着手准备了&#xff0c;我录制了一整套完整的Python自动化测试的教程&#xff0c;都上传在B站上面&#xff0c;大家有兴趣的可以去看一下&#x…

Redis 2023面试5题(二)

一、Redis key没设置过期时间却被redis主动删除了 如果一个 Redis 键没有设置过期时间&#xff0c;那么 Redis 无法判断该键是否应该自动删除。因此&#xff0c;如果一个没有设置过期时间的键被 Redis 主动删除了&#xff0c;可能是以下原因之一&#xff1a; 内存不足&#x…

工程机械比例阀电流采集方案

工程机械的需求量变得越来越大&#xff0c;而关于工程机械&#xff0c;其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置。在普通压力阀、流量阀和方向阀上&#xff0c;用比例电磁铁替代原有的控制部分&#xff0c;并按输入的电气信号连续、按比例地对油流的压力、…

VUE 2X 条件列表渲染 ⑧

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs条件渲染列表渲染 基本列表 Key的原理 列表过滤 列表排序 列表更新小问题 监测数据改变的原理~对象 V u e S e t VueSet VueSet的…

常见web中间件漏洞复现总结

文章目录 IISPUT漏洞iis6.0 解析漏洞IIS短文件漏洞远程代码执行(RCE-CVE-2017-7269)iis7.x文件解析漏洞HTTP.SYS远程代码执行 (MS15-034) apache未知扩展名解析漏洞AddHandler解析漏洞目录遍历漏洞Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; Nginx文件解…

RabbitMQ入门学习笔记

文章目录 RabbitMQ学习笔记前言1、RabbitMQ概述1.1 MQ概述1.2 RabbitMQ概述 2、RabbitMQ的安装3、RabbitMQ初体验4、工作队列4.1 消息应答4.1.1 消息应答简介4.1.2 消息手动应答 4.2 队列和消息的持久化4.2.1 队列持久化4.2.2 消息持久化 4.3 消息分发4.3.1 不公平分发4.3.2 预…

[进阶]Java:线程池、处理Runnable、Callable任务、使用Executors得到线程池

什么是线程池&#xff1f; 线程池就是一个可以复用线程的技术。 不实用线程池的问题&#xff1f; 用户每发起一个请求&#xff0c;后台就需要创建一个新线程来处理&#xff0c;下次新任务来了肯定又要创建新线程处理的&#xff0c; 而创建新线程的开销是很大的&#xff0c;并…

MIT 6.S081 (BOOK-RISCV-REV1)教材第四章内容 --中

MIT 6.S081 教材第四章内容 -- 中 引言Debug Trap代码执行流程进入Trap前发生Trap时uservec函数Issue usertrap函数usertrapret函数userret函数 小结 引言 MIT 6.S081 2020 操作系统 本文为MIT 6.S081课程第四章教材内容翻译加整理。 本课程前置知识主要涉及: C语言(建议阅读…

二进制部署k8集群(上)搭建单机matser和etcd集群

1. 单机matser预部署设计 组件部署&#xff1a; 2.操作系统初始化配置 注意&#xff1a;该操作在所有node节点上进行&#xff0c;为k8s集群提供适合的初始化部署环境 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld iptables -F && iptables -t n…

985大学学生故意挂科为延毕?赖校族的无奈。

“他室友挂了4科&#xff0c;答辩随便写了几句&#xff0c;一问三不知。” “然后呢&#xff1f;他室友延毕了吗&#xff1f;” “没有。导员找他谈话&#xff0c;说让他室友按时毕业&#xff0c;因为想延毕的人太多了&#xff0c;别人挂的都比他室友多。” 以上对话不仅仅是…

PLC原理及PLC+FPGA(SOC)架构方案简介

一、PLC原理简介 工业生产和科技的发展都离不开PLC的自动化控制&#xff0c;PLC可以广义的理解为&#xff1a; 集中的继电器延伸控制柜&#xff0c;实际的生产应用中&#xff0c;PLC大大的节省了工业控制的成本&#xff0c;加强了设备的集中管理和自动控制。 PLC&#xff08…

【人脸检测——基于机器学习4】HOG特征

前言 HOG特征的全称是Histograms of Oriented Gradients,基于HOG特征的人脸识别算法主要包括HOG特征提取和目标检测,该算法的流程图如下图所示。本文主要讲HOG特征提取。 HOG特征的组成 Cell:将一幅图片划分为若干个cell(如上图绿色框所示),每个cell为8*8像素 Block:选…

NET Core 6.0 webapi 简单使用+连接数据库

文章目录 环境创建WebApi并防止Api冲突Swagger添加注释连接sqlite数据库Nuget包代码 环境 ASP.NET coreNET core 6.0 创建WebApi并防止Api冲突 using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc;namespace WebApi1.Controllers {//[Route("api/[control…

三、Docker基本使用及命令

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、帮助启动类命令1.1 启动docker1.2 停止docker1.3 重启docker1.4 查看docker状态1.5 开机启动1.6 查看docker概要信息1.7 查看docker总体帮助文档1.8 查看docker命令…

Qt QPainter

QPainter需要在QPaintEvent中绘画 绘画需要笔 绘画需要的基础头文件 QPainter QPaintEvent QPen QPainter 建立painter之后就可以绘画&#xff0c;pen这些都有默认实现 可画设备 圆用椭圆画 重新绘画 重新绘画只需要重新加入画笔就可以 painter.setPen(pen); // 重新…

Shell脚本中的数值计算:使用数学运算实现数值操作

前言 沐风晓月带你学云原生开发&#xff0c;从零开始&#xff0c;我们出发&#xff0c;让知识学习不再难。 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家 &#x1f609;&…