39. 组合总和

news2024/9/23 1:22:42

39. 组合总和

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

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

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

示例 1:

输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]
解释:
2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一个候选, 7 = 7 。
仅有这两种组合。

示例 2:

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

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

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates 的所有元素 互不相同
  • 1 <= target <= 40

思路:(回溯)

主要思想还是回溯,只不过要注意以下点:

  • 由于同一个数字可以重复使用,所以不需要设置是否已访问数组,只要所给数字不大于目标数target,就有可能被调用多次
  • 这就要设置所选范围:
    • 刚开始要把所给数组按升序排序
    • 如果target比数组的第一个数都小,肯定不成立,直接返回
    • 再去寻找最后界限,我是通过二分查找,找到最后一位不大于target的数的位置
    • 如果每次递归都要从数组的第一个开始就会产生重复数组,这个就是处理一下顺序的问题,可以参考我的另一个博客47. 全排列 II,在这里只需从当前位置往后查找即可,不要回头查找。

代码:(Java)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class combinationSum {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int[] candidates = {2, 3, 6, 7};
		int target = 7;
		System.out.println(combinationSum(candidates, target));
	}
	public static List<List<Integer>> combinationSum(int[] candidates, int target) {
		List<List<Integer>> combinations = new ArrayList<>();
		List<Integer> combination = new ArrayList<>();
		Arrays.sort(candidates);//先排序
		if(candidates == null || candidates.length == 0 || target < candidates[0]) {
			return combinations;
		}
		backtarcking(combinations, combination, candidates, 0, target);
		return combinations;
    }
	private static void backtarcking(List<List<Integer>> combinations, List<Integer> combination, int[] candidates, int start, int target) {
		// TODO 自动生成的方法存根
		if(target == 0) {
			combinations.add(new ArrayList<>(combination));
			return;
		}
		if(target < candidates[start]) {
			return;
		}
		int end = search(candidates, target);
		for(int i = start; i <= end; i++) {
			combination.add(candidates[i]);
			backtarcking(combinations, combination, candidates, i, target - candidates[i]);
			combination.remove(combination.size() - 1);//回溯
		}
		
	}
	private static int search(int[] candidates, int target) {//二分查找
		// TODO 自动生成的方法存根
		int r = candidates.length - 1;
		int l = 0;
		while(l != r) {
			int mid = l + (r - l) / 2;
			if(candidates[mid] > target) {
				r = mid - 1;
			}else if(r == l + 1) {
				break;
			}else{
				l = mid;
			}
		}
		if(candidates[r] > target) {
			r = l;
		}
		return r;
	}
}

运行结果:

在这里插入图片描述

其他可用回溯方法的题目:

257. 二叉树的所有路径
79. 单词搜索
93. 复原 IP 地址
17. 电话号码的字母组合
46. 全排列
47. 全排列 II

注:仅供学参考!

题目来源:力扣

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

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

相关文章

C++并发编程

目录一、并发编程相关的基础概念1、操作系统&#xff08;Linux&#xff09;2、任务和通信3、多进程和多线程4、C中的多线程发展史二、pthread线程使用讲解和实战1、pthread基本使用2、线程的分离3、线程属性4、关于线程的几个值得注意的点三、线程的同步之互斥锁、读写锁、非阻…

MySQL 数据库主从复制

参考视频教程: https://www.bilibili.com/video/BV13a411q753?p172 参考博客: https://blog.csdn.net/main_Scanner01/article/details/124259050 1. 介绍 1.1 要点 主库(master): 负责增删改 从库(slave) : 负责查询 主从库关系: 一对多 1.2 步骤 ● master将改变记录到_…

宝塔部署node项目

宝塔linux&#xff1a;是一个linux运维面板&#xff0c;方便管理服务器。 安装服务器默认宝塔面板 使用步骤 到防火墙页面开启8888端口&#xff1a; 点击进入防火墙远程登录服务器。复制面板安全入口查询命令&#xff0c;获取面板安全入口。sudo /etc/init.d/bt default | gr…

快速入门Docker

目录 Docker简介 Dokcer环境配置 Docker HelloWorld运行原理解析 阿里云镜像仓库 常用命令 基本命令 镜像命令 容器命令 Docker简介 Docker 是基于Go语言实现的一个开源项目&#xff0c;通过对应组建的封装&#xff0c;分发&#xff0c;部署&#xff0c;运行等生命周期的管…

如何创建多语言WordPress网站[专家建议]

如果您想有效地接触广泛的国际受众&#xff0c;那么您应该考虑制作一个多语言WordPress网站。您知道吗&#xff0c;61.1% 的网站是英文的&#xff0c;但全球只有 25.9% 的用户实际上可以在线使用这种语言。 多语言功能意味着创建站点的两个或多个语言实例&#xff0c;在大多数…

anaconda安装pytorch

1.需不需要另外创建一个新环境 答案是&#xff1a;可以不需要 所以我的做法是直接在base环境中安装的pytorch 2.python、torch、torchvision版本对应 我的是python3.9&#xff0c;安装的是cuda11.3–torch1.10.1&#xff0c;所以按理来说torchvision为0.11.2 3.离线安装tor…

P4的exercises实现原理

今天介绍一下p4的tutorials-master\utils如何将tutorials-master\exercises下各个小实验的实现&#xff0c;有助于以后自己构建mininet并配置p4交换机&#xff0c;通过本博客可以简单了解&#xff1a; Makefile是如何实现相关的实验的基于p4的mininet如何搭建 1.Makefile干了什…

python-(6-4-3)爬虫---re解析案例

文章目录一 需求二 总体思路1&#xff09;从网址定位到2022必看热片2&#xff09;从2022必看热片定位到子页面的链接地址3&#xff09;请求子页面的链接地址&#xff0c;拿到我们想要的下载地址三 分析步骤1&#xff09;从网址定位到2022必看热片2&#xff09;从2022必看热片定…

开关电源环路稳定性分析(05)-传递函数

大家好&#xff0c;这里是大话硬件。 经过前面4篇文章的梳理&#xff0c;估计很多人已经等不及了&#xff0c;什么时候可以开始环路的分析。为了尽快进入到大家关心的部分&#xff0c;这一讲我们正式进入环路分析的第一部分——传递函数。 传递函数&#xff0c;简单的理解就是…

立体车库管理系统

1、立体车库主界面 左侧为菜单栏中间为监视页面上方为实时报警页面&#xff0c;上方第二页为设备指令&#xff0c;第三页为升降机监测&#xff0c;第三页为穿梭车监测2、立体车库设备状态显示 通用状态显示升降机1#2#和穿梭车1#2#3#的缓存指令编号&#xff0c;点击按钮可以清楚…

【设计模式】32.结构型模式-组合模式(Composite)

一、描述 首先&#xff0c;看一个数据结构&#xff1a; 在平时开发过程中&#xff0c;我们的菜单目录、文件夹目录等都有类似如上的实体结构&#xff0c;其中composite代表父级节点&#xff0c;leaf代表叶子节点&#xff0c;composite可以有子节点&#xff0c;但是leaf下没有…

一文读懂ChatGPT模型原理

&#xff08;本文是ChatGPT原理介绍&#xff0c;但没有任何数学公式&#xff0c;可以放心食用&#xff09; 前言 这两天&#xff0c;ChatGPT模型真可谓称得上是狂拽酷炫D炸天的存在了。一度登上了知乎热搜&#xff0c;这对科技类话题是非常难的存在。不光是做人工智能、机器学习…

ORB-SLAM2 ---- Tracking::TrackWithMotionModel函数

目录 1.函数作用 2.步骤 3.code 4.函数解释 4.1 更新上一帧的位姿&#xff1b;对于双目或RGB-D相机&#xff0c;还会根据深度值生成临时地图点 4.2 根据之前估计的速度&#xff0c;用恒速模型得到当前帧的初始位姿。 4.3 用上一帧地图点进行投影匹配&#xff0c;如果匹…

JDK版本对应其major.minor version,看这一篇就够啦(附java历史版本下载地址)

文章目录前言JDK版本对应其major versionJDK历史版本下载地址前言 今天博主在学习SpringBoot&#xff0c;启动项目时遇到这样一个问题 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project springbo…

[附源码]JAVA毕业设计企业信息安全评价系统(系统+LW)

[附源码]JAVA毕业设计企业信息安全评价系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

[附源码]Python计算机毕业设计Django小区疫情事件处理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Git学习笔记 Git Gitee GitHub GitLab

目录 Git GitHub Gitee码云 GitLab Git 概述 何为版本控制 为什么需要版本控制 集中式版本控制工具 分布式版本控制工具 Git和代码托管中心 Git命令 git init命令 git config git status 查看 git 状态 git rm --cached xx git commit -m “备注” xx git reflo…

PHP代码审计系列(二)

PHP代码审计系列&#xff08;二&#xff09; 本系列将收集多个PHP代码安全审计项目从易到难&#xff0c;并加入个人详细的源码解读。此系列将进行持续更新。 strcmp比较字符串 源码如下 <?php $flag "flag"; if (isset($_GET[a])) { if (strcmp($_GET[a], …

DBCO-PEG3-Maleimide,Mal-PEG3-DBCO,二苯并环辛炔-三聚乙二醇-马来酰亚胺

​ 中英文名&#xff1a; CAS号&#xff1a;N/A| 英文名&#xff1a;DBCO-PEG3-Maleimide&#xff0c;Mal-PEG3-DBCO |中文名&#xff1a;二苯并环辛炔-三聚乙二醇-马来酰亚胺物理参数&#xff1a; CASNumber&#xff1a;N/A Molecular formula&#xff1a;C34H38N4O8 Molecul…

[附源码]计算机毕业设计绿色生鲜Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…