Leetcode40 组合之和2

news2024/10/5 14:28:15

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用 一次 。

注意:解集不能包含重复的组合。

解题思路:回溯+剪枝

 

image.png

 

代码:

class Solution {
    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        List<List<Integer>> res = new ArrayList<>();
        if(candidates.length == 0){
            return res;
        }
        Arrays.sort(candidates);
        Deque<Integer> path = new ArrayDeque<>();
        dfs(candidates,0,target,path,res);
        return res;
    }
    private void dfs(int[] candidates, int begin, int target, Deque<Integer> path, List<List<Integer>> res) {
        if(target == 0){
            res.add(new ArrayList<>(path));
            return;
        }
        for(int i = begin; i < candidates.length;i++){
            if(target - candidates[i] < 0){
                break;
            }
            if(i > begin && candidates[i] == candidates[i-1]){
                continue;
            }
            path.addLast(candidates[i]);
            System.out.println("递归之前 => " + path + ",剩余 = " + (target - candidates[i]));
            dfs(candidates,i+1,target - candidates[i],path,res);
            path.removeLast();
             System.out.println("递归之后 => " + path + ",剩余 = " + (target - candidates[i]));
        }
    }
}

 

 [1,1,2,5,6,7,10]

递归之前 => [1],剩余 = 7
递归之前 => [1, 1],剩余 = 6
递归之前 => [1, 1, 2],剩余 = 4
递归之后 => [1, 1],剩余 = 4
递归之前 => [1, 1, 5],剩余 = 1
递归之后 => [1, 1],剩余 = 1
递归之前 => [1, 1, 6],剩余 = 0
递归之后 => [1, 1],剩余 = 0
递归之后 => [1],剩余 = 6
递归之前 => [1, 2],剩余 = 5
递归之前 => [1, 2, 5],剩余 = 0
递归之后 => [1, 2],剩余 = 0
递归之后 => [1],剩余 = 5
递归之前 => [1, 5],剩余 = 2
递归之后 => [1],剩余 = 2
递归之前 => [1, 6],剩余 = 1
递归之后 => [1],剩余 = 1
递归之前 => [1, 7],剩余 = 0
递归之后 => [1],剩余 = 0
递归之后 => [],剩余 = 7
递归之前 => [2],剩余 = 6
递归之前 => [2, 5],剩余 = 1
递归之后 => [2],剩余 = 1
递归之前 => [2, 6],剩余 = 0
递归之后 => [2],剩余 = 0
递归之后 => [],剩余 = 6
递归之前 => [5],剩余 = 3
递归之后 => [],剩余 = 3
递归之前 => [6],剩余 = 2
递归之后 => [],剩余 = 2
递归之前 => [7],剩余 = 1
递归之后 => [],剩余 = 1
输出 => [[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]]

 

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

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

相关文章

LeetCode--HOT100题(31)

目录 题目描述&#xff1a;25. K 个一组翻转链表&#xff08;困难&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;25. K 个一组翻转链表&#xff08;困难&#xff09; 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表…

麦肯锡重磅发布2023年15项技术趋势,生成式AI首次入选,选对了就是风口

两位朋友在不同群里分享了同一份深度报告。 一位是LH美女&#xff0c;她在“AIGC时代”群里上传了这份文档&#xff0c;响应寥寥&#xff0c;可能是因为这些报告没有像八卦文那样容易带来冲击。 你看韩彬的这篇《金融妲己&#xff1a;基金公司女销售的瓜&#xff0c;一个比一个…

Ingress企业实战:金丝雀与蓝绿发布篇

背景 现如今&#xff0c;越来越多的应用采用了微服务架构&#xff0c;这也导致了应用数量相比传统模式更多&#xff0c;管理更加复杂&#xff0c;发布更加频繁&#xff0c;如果直接将新版本上线发布给全部用户。一旦遇到线上事故&#xff08;或BUG&#xff09;&#xff0c;对用…

哪些客户适合打Cold Call?

都知道Cold Call是外贸营销中一种重要的销售方式&#xff0c;相比邮件跟进&#xff0c;它可以可实时交流&#xff0c;获取需求&#xff0c;解决问题&#xff0c;展示人情味&#xff0c;提升好感度&#xff0c;提高转化率。但由于陌生性&#xff0c;当下如果没有需求的话&#x…

“万恶”之源的KieServices,获取代码就一行,表面代码越少里面东西就越多,本以为就是个简单的工厂方法,没想到里面弯弯绕绕这么多东西

Drools用户手册看了得有一段时间了&#xff0c;现在开始看源码了&#xff0c;因为每次使用drools都会看见这么一段代码&#xff1a; 代码段1 起手代码 KieServices ks KieServices.Factory.get(); 那我就从这段代码出发开始研究drools的源码吧&#xff0c;这么一小段代码起初…

文件操作/IO

文件 文件是一种在硬盘上存储数据的方式&#xff0c;操作系统帮我们把硬盘的一些细节都封装起来了&#xff0c;程序员只需要了解文件相关的接口即可&#xff0c;相当于操作文件就是间接的操作硬盘了 硬盘用来存储数据&#xff0c;和内存相比硬盘的存储空间更大&#xff0c;访问…

代码运行出现:No module named ‘torch_geometric‘

这是没有torch_geometric库导致的&#xff0c;但是不能像一般库安装‘pip install 库名’或者‘conda install 库名’进行安装&#xff0c;经常会报错!!! 需要先安装四个小部件再安装torch_geometric&#xff0c;具体安装步骤如下&#xff1a; step 1&#xff1a;查看自己环境…

简约时尚的健康手表,智能守护每一刻,dido Y60上手

智能手表是现在很流行的一种智能设备&#xff0c;很多品牌都推出了各种各样的产品&#xff0c;但是大部分都更侧重功能和运动的方面&#xff0c;健康监测往往只是配角&#xff0c;而随着人们对自己的健康越来越重视&#xff0c;有些朋友只是单纯的需要一块专业的健康监测手表。…

SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配

介绍 人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢? 尽管…

部署私有知识库项目FastGPT

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景。 项目源码&#xff1a; GitHub - c121914yu/FastGPT: A platform that uses the Open…

【推荐】7个可以改变我们在3dMax中工作方式的插件

​以下给大家介绍的这些插件&#xff0c;将改变我们在3d Max中的工作方式&#xff0c;让生活更加轻松。 Glue Utility&#xff08;粘合实用程序&#xff09; 这些年来&#xff0c;这个工具改变了我的游戏规则。它使我能够执行许多任务&#xff0c;否则这些任务要么是不可能…

在矩池云使用 ChatGLM2-6B ptuning

本文参考 ChatGLM2-6B 官方文档&#xff0c;在矩池云复现了对于 ChatGLM2-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%&#xff0c;再通过模型量化、Gradient Checkpoint 等方法&#xff0c;最低只需要 7GB 显存即可运行。 官方文档地址…

一百五十六、Kettle——Linux上安装的Kettle9.3连接ClickHouse数据库(亲测,附流程截图)

一、目标 kettle9.3在Linux上安装好后&#xff0c;需要与ClickHouse数据库建立连接 二、前提准备 &#xff08;一&#xff09;在Linux已经安装好kettle并可以启动kettle &#xff08;二&#xff09;已知kettle和ClickHouse版本 1、kettle版本是9.3 2、ClickHouse版本是21…

深度学习优化器

1、什么是优化器 优化器用来寻找模型的最优解。 2、常见优化器 2.1. 批量梯度下降法BGD(Batch Gradient Descent) 2.1.1、BGD表示 BGD 采用整个训练集的数据来计算 cost function 对参数的梯度&#xff1a; 假设要学习训练的模型参数为W&#xff0c;代价函数为J(W)&#xff0c;…

项目管理工具探析:详细介绍四种常用选择

市场上的项目管理工具&#xff0c;主要是解决项目计划制定、任务协作、文档协作这几方面的问题&#xff0c; 下面简单聊聊一些自己用过的工具&#xff1a; 1、Excel/在线协作表格 如果项目简单&#xff0c;任务数少&#xff0c;没什么依赖&#xff0c;那么就可以用Excel来做项目…

静电放电发生器的操控模式和释放模式有哪些方式

静电放电是一种自然现象 &#xff0c;当两种不同介电强度的材料相互摩擦时&#xff0c;就会产生静电电荷&#xff0c;当其中一种材料上的静电荷积累到一定程度&#xff0c;在与另外一个物体接触时&#xff0c;就会通过这个物体到大地的阻抗而进行放电。静电放电及影响是电子设备…

四大运营商的大流量卡测评,看完您会选哪个运营商?

很多朋友都说网上的流量卡资费是真的便宜&#xff0c;但是小编认为资费便宜归便宜&#xff0c;但是运营商的小心思也有不少。 ​ 今天小编就带大家看一看三大运营商推出的正规流量卡都有哪些小心思&#xff1f; 首先&#xff0c;移动推出的线上大流量卡数量是最少的&#xff…

算法|Day37 动态规划5

LeetCode 1049- 最后一块石头的重量 II 题目链接&#xff1a;力扣 题目描述&#xff1a;有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量…

Blazor : Component parameter should be auto property,无法修改get;set;

文章目录 Blazor 无法在get;set;里面定义方法 Blazor 无法在get;set;里面定义方法 Blazor Component组件 其实原因就是微软觉得你在get;set;里面放自定义逻辑&#xff0c;太容易出现无限父子回调的问题。如果你要在get时候进行某种逻辑&#xff0c;那你就在OnParameterSetAs…

归并排序 与 计数排序

目录 1.归并排序 1.1 递归实现归并排序&#xff1a; 1.2 非递归实现归并排序 1.3 归并排序的特性总结: 1.4 外部排序 2.计数排序 2.1 操作步骤: 2.2 计数排序的特性总结: 3. 7种常见比较排序比较 1.归并排序 基本思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种…