代码随想录算法训练营第二十六天(回溯算法篇)|39. 组合总和,40. 组合总和Ⅱ

39. 组合总和

题目链接:39. 组合总和 - 力扣(LeetCode)

题目内容:给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 

思路:和之前的组合那道题不同点在于1. if条件不用要求path的长度,只要和相同,就返回,可以加上剪枝——当和大于target,直接返回。2. 递归时的起始值(startIdx)是i,不是i+1, 因为可以重复。

class Solution(object):def traversal(self, result, path, sum, startIdx, candidates, target):if sum > target:returnif sum == target:result.append(path[:])returnfor i in range(startIdx, len(candidates)):path.append(candidates[i])sum += candidates[i]self.traversal(result, path, sum, i, candidates, target)path.pop()sum -= candidates[i]return resultdef combinationSum(self, candidates, target):result = []path = []return self.traversal(result, path, 0, 0, candidates, target)

40. 组合总和Ⅱ

题目链接:40. 组合总和 II - 力扣(LeetCode)

题目难点:题目里给出的数组有重复元素,但要求答案里不能有重复组合.

思路:我们要对同一数层上重复使用的元素去重——前一个相同的元素要相加的数的范围大于后面那个元素家的范围,所以一定包含后一个元素找到的数。因此,我们可以对candidates进行排序,做for循环时只需判断当前元素和它前一个元素是否相同,若相同,就pass掉,对当前元素不做处理,继续跳到后一个数。

class Solution(object):def traversal(self, result, path, sum, startIdx, candidates, target):candidates = sorted(candidates)if sum > target:returnif sum == target:result.append(path[:])returnfor i in range(startIdx, len(candidates)):if candidates[i] == candidates[i-1]:passpath.append(candidates[i])sum += candidates[i]self.traversal(result, path, sum, i, candidates, target)path.pop()sum -= candidates[i]return resultdef combinationSum(self, candidates, target):result = []path = []return self.traversal(result, path, 0, 0, candidates, target)

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

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

相关文章

变量未声明,值是undefined吗?

先看下面的代码输出什么? var name; alert(typeof name); // undefined alert(title); //报错undefined是一个只有一个值的数据类型,这个值就是undefined,在使用var声明变量但并未对其值进行初始化时,这个变量的值就是undefined。…

GO并发编程综合应用

一.GO并发编程综合应用 1.生产者消费者模式 1.1需求分析 ​ 生产者每秒生产一个商品,并通过物流公司取货 ​ 物流公司将商品运输到商铺 ​ 消费者阻塞等待商铺到货,需要消费10次商品 1.2实现原理 1.3代码实现: package mainimport (&q…

Vue学习笔记-Vue3中的shallowReactive和shallowRef

shallowReactive 作用:与reactive作用类似,但只处理对象最外层属性的响应式(浅响应式)使用场景:如果有一个对象数据,结构比较深(内嵌多层对象),但只需要最外层的属性进行…

SpringCloud微服务 【实用篇】| Docker启示录

目录 一:Docker启示录 1. Docker启示录 2. Docker和虚拟机的区别 3. Docker架构 4. Centos7安装Docker 4.1. 卸载 4.2. 安装docker 4.3. 启动docker 4.4. 配置镜像加速 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

Python之random模块详解

python的random模块 random模块是python中一个生成随机数的模块。 random不是python解释器内置的模块。 导入random模块的方法是: import random 如果只使用random模块中的单个方法的话,也可以使用 from random import method_name 例如: …

蓝牙协议栈学习笔记

蓝牙协议栈学习笔记 蓝牙简介 蓝牙工作在全球通用的 2.4GHz ISM(即工业、科学、医学)频段,使用 IEEE802.11 协议 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范,将三种规格集成在一起。其中最重要的变化就是 BLE(Blue…

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码)

【数学建模】《实战数学建模:例题与讲解》第十三讲-相关分析(含Matlab代码) 基本概念典型相关分析综合评价模型对应分析因子分析聚类分析 习题10.41. 题目要求2.解题过程3.程序 习题10.51. 题目要求2.解题过程3.程序 习题10.6(1&a…

用Excel绘制柱形图

在需要将数据用柱状图表示的时候,可以用Excel进行绘制。不单绘制柱形图,其他数据图也可以用Excel绘制。 接下来用绘制一个销售表的示例演示。 1.将数据输入Excel 数学书 语文书 英语书 一月 80 94 77 二月 95 86 84 三月 130 93 79 四月 …

实用干货:再见ElementPlus,我有更好的了

大家好,我是大澈! 本文约1200字,整篇阅读大约需要3分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试大礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff…

任务调度系统就该这么设计(万能通用),稳的一批!

今天来扒一扒轻量级的分布式任务调度平台Xxl-Job背后的架构原理 核心概念 这里还是老样子,为了保证文章的完整性和连贯性,方便那些没有使用过的小伙伴更加容易接受文章的内容,快速讲一讲Xxl-Job中的概念和使用 如果你已经使用过了&#xf…

在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)

背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用。本篇文章将引导你快速理解这个调用的过程。 步骤 1. 创建一个CSharp…

Java 8特性:Lambda表达式、函数式接口与Stream API的深度探索

一、引言 随着编程范式的不断演变,Java语言也在不断地发展和创新。Java 8的发布,为开发者们带来了诸多全新的特性,其中包括Lambda表达式、函数式接口以及Stream API。这些特性使得Java语言的编程更加简洁、优雅,同时也提高了代码…

mybatis多表映射-对多关联

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

第16节:Vue3 响应式对象reactive()

在UniApp中使用Vue3框架时,你可以使用reactive()函数来创建一个响应式对象。reactive()函数返回一个响应式引用对象,它包装了一个普通的对象,使得该对象能够成为响应式数据源。 下面是一个示例,演示了如何在UniApp中使用Vue3框架…

docker部署go gin框架 Windows环境

目录 文章目的是什么 环境介绍 Windows 环境下 docker 部署 go gin 详细步骤 运行容器时因为挂载文件可能会出现的问题 直接部署gin(跳过运行容器时因为挂载文件可能会出现的问题) 文章目的是什么 假设我们学习了 go 语言,在 Windows(本…

6.rk3588获取摄像头和激光雷达数据(用线程根据时间同步)

文件夹结构如下: 如果没有特殊说明,我们将py文件写在该路径里面。 保存数据的路径如下: ---img_lidar_save ---2023-12-13(根据日期自动生成当天保存数据的文件夹) ---camera_data(相机数据文件夹) ---image(保存相加…

[蓝桥杯刷题]合并区间、最长不连续子序列、最长不重复数组长度

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录: 成功的关键在于对目标的持久追求。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 数据库 文章目录 前言合并区间问题📕现实应用大致思路代码实现代码讲解 最长不连续子序列&a…

jvisualvm手动安装VisualGC插件

前言 笔者近期排查问题需要查看GC的情况,于是用到了jvisualvm这个工具,查阅网上资料发现它有一个名为VisualGC的插件非常好用,于是笔者以此文记录一下VisualGC插件的安装步骤。 安装步骤 下载插件 首先我们要到官网 https://visualvm.gi…

未势能源受邀参加中国氢能100人论坛并发表演讲

12月12日-14日,“2023氢能嘉年华暨中国氢能100人论坛年会”在苏州举办,行业内专家学者、氢能头部企业代表等齐聚现场,聚焦氢能在化工、钢铁、交通等领域发展,共同探讨我国氢能产业初期前进之路。 未势能源液氢总工程师黄欢明受邀…

Java发起post和get请求

本文分享两种方式,一种是使用HttpURLConnection ,另一种是使用 Apache HttpClient 使用 HttpURLConnection 发送 GET 请求: import java.net.HttpURLConnection; import java.net.URL; import java.io.BufferedReader; import java.io.Inpu…