回溯法---组合总和

news2024/9/9 6:49:36

题目:

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

思路:

全局变量result存储结果集,path存储某一组合

第一步:确定参数与返回值。参数为candidates数组,target,sum(path数组中现有值之和),startIndex(遍历的candidates数组下标起始),无返回值

第二步:确定终止条件。当target=sum时,获取到一个组合,将组合加入到结果集中

第三步:确定单层递归逻辑。for循环遍历candidates数组,从startIndex到candidates数组的最后一个元素。进行剪枝优化操作,当sum+candidates[i]>target时,就不必进行下去了。for循环里的步骤就是:更新sum,更新path,递归调用,回溯。

代码:

    List<List<Integer>> result=new ArrayList<>();//结果集
    List<Integer> path=new ArrayList<>();//存储某一组合
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);//排序
        backTracking(candidates,target,0,0);
        return result;
    }
    public void backTracking(int[] candidates,int target,int sum,int startIndex){
        if(sum==target){
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i=startIndex;i<candidates.length&&sum+candidates[i]<=target;i++){
            sum+=candidates[i];
            path.add(candidates[i]);//处理

            backTracking(candidates,target,sum,i);//递归,注意从i开始,因为数字可重复

            sum-=candidates[i];//回溯
            path.remove(path.size()-1);
        }
    }

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

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

相关文章

软考系统架构师-计算机网络基础

目录 3.1 网络的基本概念 3.2 通信技术 3.3 网络技术 3.4 组网技术 1.网络设备及其工作层级 2.网络协议 &#xff08;1&#xff09;应用层协议。 &#xff08;2&#xff09;传输层协议。 &#xff08;3&#xff09;网络层协议。 3&#xff0e;交换机 4&#xff0e…

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人&#xff0c;它能像一位经验丰富的工程师&#xff0c;理解你的问题&#xff0c;并从 Speckle 文档中精准地找到答案。更厉害的是&#xff0c;它甚至可以帮你生成代码片段&#xff01; &#x1f680; 本文将详…

linux:基本权限

1、权限与用户之间的关系 在Linux系统中&#xff0c;针对文件定义了三种身份&#xff0c;分别是属主(owner)、属组(group)、其他人(others)&#xff0c;每一种身份又对应三种权限&#xff0c;分别是可读(readable)、可写(writable)、可执行(excutable)。 2、如何修改一个文件的…

快团团等社区团购类小区物资团购怎么按商品批量退款?

疫情期间&#xff0c;小区物资团的配送需要达到一定的起送件数&#xff0c;对于一些没有达到起送件数的商品&#xff0c;如何快速地批量退款呢&#xff1f;按照下列操作&#xff0c;只需四步&#xff0c;就可以对某一商品批量退款。 第1步&#xff1a;进入团购页面&#xff0c…

JavaScript(二)变量

一、两种注释方式 // 这是当行注释/* 这是多行注释 这是多行注释 */二、变量是什么 变量就是一个可以存放“数值”的容器&#xff0c;这个“数值”可以是数字、字符串、函数等。 变量不是数值本身&#xff0c;它是一个用于存储数值的容器&#xff0c;你可以把变量想象成一个个…

解决断点问题导致项目没有完全启动bug

场景&#xff1a; 项目启动正常&#xff0c;启动日志也正常打印&#xff0c;但是无法判断是否启动完毕&#xff0c;访问接口也进不了服务 原因&#xff1a; 启动前调试项目打断点时 不晓得打到了某个层面的断点 具体是哪忘了&#xff0c;导致项目没有完全启动&#xff0c;启…

WIFI7:引领智能驾驶新未来

近年来&#xff0c;智能驾驶技术飞速发展&#xff0c;从最初的初级的辅助驾驶逐步迈向高度自动驾驶&#xff0c;这一变化历程深刻依赖的是高效、稳定且前沿的无线通信技术的支撑。WIFI7&#xff0c;作为无线通信领域的最新里程碑&#xff0c;凭借其前所未有的性能提升与功能拓展…

一级指针和一维数组

文章目录 &#x1f34a;自我介绍&#x1f34a;一级指针和一维数组&#x1f34a;a , &a[0]和&a之间的关系 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好…

Tugraph的安装部署

文章目录 一、安装Docker二、拉取TuGraph镜像三、访问web端 一、安装Docker http://t.csdnimg.cn/djJYX 二、拉取TuGraph镜像 https://hub.docker.com/search?qtugraph 拉取的时间会有些长 docker pull tugraph/tugraph-compile-ubuntu18.04如docker镜像拉取失败&#xff…

IDEA管理远程仓库Git

1、模拟项目 新建一个文件夹&#xff0c;用来这次演示 用IDEA来打开文件夹 2、创建仓库 在IDEA中给该文件夹创建本地仓库和远程仓库 在菜单栏找到VCS选择Share project on Gitee 在弹窗中输入描述信息 接下来会出现以下弹窗 点击ADD后&#xff0c;在gitee上会创建远程仓库 …

敏捷产品经理实训:助力产品负责人掌握敏捷方法,提升产品开发效率

在当今快节奏的市场环境中&#xff0c;产品经理和产品负责人需要快速响应市场变化&#xff0c;推动产品创新&#xff0c;以满足用户不断变化的需求。敏捷产品经理实训课程专为产品经理和产品负责人设计&#xff0c;旨在帮助他们掌握敏捷方法&#xff0c;提高团队协作和产品开发…

python dash框架

Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发&#xff0c;并且可以用来构建交互式的 web 应用程序&#xff0c;这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点&#xff1a; 易于使用&#xff1a;Dash 使用 Python 语法…

二叉树的介绍及其顺序结构的实现

Hello, 亲爱的小伙伴们&#xff0c;你们的作者菌又回来了&#xff0c;之前我们学习了链表、顺序表、栈等常见的数据结构&#xff0c;今天我们将紧跟之前的脚步&#xff0c;继续学习二叉树。 好&#xff0c;咱们废话不多说&#xff0c;开始我们今天的正题。 1.树 1.1树的概念和…

Vue3+.NET6前后端分离式管理后台实战(三十二)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(三十二)

Java上门做饭平台系统小程序源码

&#x1f37d;️解锁新生活方式&#xff01;揭秘“上门做饭平台系统”的五大魅力&#x1f31f; &#x1f3e0;【懒人福音&#xff0c;美食直达家门】 在这个快节奏的时代&#xff0c;谁不想下班后直接享受热腾腾的家常美味呢&#xff1f;上门做饭平台系统就是你的私人厨师团队…

java基础概念07-switch语句

一、switch定义 二、基本语法 switch (expression) { case value1: // 当expression的值等于value1时执行的代码 break; // 可选 case value2: // 当expression的值等于value2时执行的代码 break; // 可选 // 你可以有任意数量的case语句 default: // 可选 // 当没有…

【Android驱动06】GMS兼容性测试CTS --环境搭建、测试执行、结果分析

CTS即Compatibility Test Suite意为兼容性测试&#xff0c;是Google推出的Android平台兼容性测试机制。其目的是尽早发现不兼容性&#xff0c;并确保软件在整个开发过程中保持兼容性。只有通过CTS认证的设备才能合法的安装并使用Google market等Google应用。 一&#xff0c;搭…

leetcode 二叉树专题——java实现

1. 二叉树中序遍历 给一棵树&#xff0c;输出中序遍历。 树已经给你建好了&#xff0c;按照一下形式&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* Tree…

花10分钟写个漂亮的后端API接口模板!

你好&#xff0c;我是田哥 在这微服务架构盛行的黄金时段&#xff0c;加上越来越多的前后端分离&#xff0c;导致后端API接口规范变得越来越重要了。 比如&#xff1a;统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码&#xff0c;以及…