代码随想录算法训练营第二十七天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和

题目:

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

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

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

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

思路:

        所给的数组里的数字是不重复发。

       

代码:

class Solution:# 递归函数def backtracking(self, total, result, startIndex, path, target, candidates):# 终止条件if total > target:returnif total == target:result.append(path[:])return# 遍历for i in range(startIndex, len(candidates)):total += candidates[i]path.append(candidates[i])# 调用递归self.backtracking(total, result, i, path, target, candidates)# 上面  是从i不是i+1的原因:每个数字可以重复使用total -= candidates[i]   # 弹出path.pop()  # 回溯# 主函数def combinationSum(self, candidates, target):result = []self.backtracking(0, result, 0, [], target, candidates)return result

40.组合总和II

题目:

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

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

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

思路:

和上一题的区别:每个数字不能重复使用,但是列表里有重复的数字。

所以要去重,利用used数组判断,这是本题解答的核心。

代码:

class Solution:def backtracking(self, candidates, target, total, startIndex, used, path, result):if total == target:result.append(path[:])returnfor i in range(startIndex, len(candidates)):if i > startIndex and candidates[i] == candidates[i - 1] and not used[i - 1]:  # 去重continueif total + candidates[i] > target:breaktotal += candidates[i]path.append(candidates[i])used[i] = True  # candidates[i]被使用过self.backtracking(candidates, target, total, i + 1, used, path, result)  # 继续搜索used[i] = False  # 没有被用过total -= candidates[i]path.pop()def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:used = [False] * len(candidates)  # 将used数组全部初始化为False,表示所有的元素都还没有被使用过result = []candidates.sort()  # 给数组排序self.backtracking(candidates, target, 0, 0, used, [], result)return result

131.分割回文串

题目:

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

思路:

看过视频的思路

重要的是多了一步判断回文的函数,以及把startIndex作为切割线,以及每次收集结果的时候利用切片。

代码:

class Solution:# 判断是不是回文串def is_palindrome(self, s: str, start: int, end: int) -> bool:i:int = startj:int = endwhile i < j:if s[i] != s[j]:return Falsei += 1j -= 1return True# 递归def backtracking(self, s, path, result, startIndex):# 终止条件if startIndex == len(s):result.append(path[:])return# 遍历  单层递归逻辑for i in range(startIndex, len(s)):if self.is_palindrome(s, startIndex, i):  # 调用判断回文串的函数path.append(s[startIndex:i + 1])  # 切片self.backtracking(s,  path, result,i + 1)path.pop()# 主函数def partition(self, s: str):result = []self.backtracking(s,  [], result,0)return result

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

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

相关文章

什么是预训练Pre-training—— AIGC必备知识点,您get了吗?

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 随着人工智能(AI)不断重塑我们的世界&#xff0c;其发展的一个关键方面已经…

springboot医院信管系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

浙大恩特客户资源管理系统 CrmBasicAction.entcrm任意文件上传

产品介绍 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源&#xff0c;提升销售和市场营销的效果。 漏洞描述 浙大恩特客户资源管理系统 fcrmbasicaction接口存在任意文件上传漏洞。攻击者可通过该漏洞在服务器…

PTA——闰年判断

输入一个年份&#xff0c;判断其是否为闰年&#xff0c;是闰年输出True&#xff0c;不是闰年输出False。 闰年的判断条件&#xff1a;年号能被4整除&#xff0c;但不能被100整除&#xff1b;或者能被400整除。 输入格式: 输入年号&#xff0c;如&#xff1a;2023。 输出格式…

机器学习笔记:时间序列异常检测

1 异常类型 1.1 异常值outlier 给定输入时间序列&#xff0c;异常值是时间戳值其中观测值与该时间序列的期望值不同。 1.2 波动点&#xff08;Change Point&#xff09; 给定输入时间序列&#xff0c;波动点是指在某个时间t&#xff0c;其状态在这个时间序列上表现出与t前后…

C语言——!(--x)和!(-x)以及while(!(--x)) 和 while(!(-x))

一、!(--x) 和 !(-x) 1. !(--x) 这个表达式表示先对变量 x 执行自减操作&#xff08;即 x 的值减去 1&#xff09;&#xff0c;然后对自减后得到的结果取逻辑非。 如果自减后的 x 等于 0&#xff0c;则逻辑非运算的结果为真&#xff08;值为 1&#xff09;&#xff1b;否则结果…

Java加密解密大全(MD5、RSA)

目录 一、MD5加密二、RSA加解密(公加私解&#xff0c;私加公解)三、RSA私钥加密四、RSA私钥加密PKCS1Padding模式 一、MD5加密 密文形式&#xff1a;5eb63bbbe01eeed093cb22bb8f5acdc3 import java.math.BigInteger; import java.security.MessageDigest; import java.security…

京东(天猫淘宝)数据分析工具-鲸参谋系统全功能解析——行业大盘、红蓝海市场、品牌分析、店铺分析、商品分析、竞品监控(区分自营和POP)

作为第三方电商数据平台&#xff0c;鲸参谋电商大数据系统能够为品牌方和商家提供包括行业趋势、热门品牌、店铺分析、单品分析在内的多个层面数据分析&#xff0c;帮助商家做出更加准确的经营决策&#xff0c;提升经营效率&#xff0c;实现精准营销。 下面&#xff0c;我们针…

linux和windows机器下创建共享文件夹

1、安装samba sudo apt-get install samba 2、创建共享文件夹 sudo mkdir /smb sudo chmod 777 /smb/ 3、备份配置 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 4、修改配置 sudo vim /etc/samba/smb.conf 添加以下信息到文件结尾 [SMB share] #描述信息…

压测必经之路,Jmeter分布式压测教程

01、分布式压测原理 Jemter分布式压测是选择其中一台作为调度机&#xff08;master&#xff09;&#xff0c;其他机器作为执行机&#xff08;slave&#xff09;&#xff1b;当然一台机器也可以既做调度机&#xff0c;也做执行机。 调度机执行脚本的时候&#xff0c;master将会…

Springboot的配置文件详解:从入门到精通,解读配置文件的奇妙世界

目录 1、前言 2、介绍 2.1 Springboot配置文件的作用 2.2 Springboot支持的配置文件类型 2.3 Springboot配置文件的加载顺序 3、YAML配置文件 3.1 YAML基本语法介绍 3.2 YAML中的基本数据类型 3.3 YAML中的复合数据类型 3.4 YAML中的配置属性 3.5 YAML中的多环境配置…

Python虚拟环境轻松配置:Jupyter Notebook中的内核管理指南

问题 在Python开发中&#xff0c;一些人在服务器上使用Jupyter Notebook中进行开发。一般是创建虚拟环境后&#xff0c;向Jupyter notebook中添加虚拟环境中的Kernel&#xff0c;后续新建Notebook中在该Kernel中进行开发&#xff0c;这里记录一下如何创建Python虚拟环境以及添…

前端缓存的方式

Service Workers 【可以缓存资源的请求&#xff0c;参考】web Storage【LocalStorage/SessionStorage】IndexedDB【这个相当于浏览器中的数据库&#xff0c;请看官网】Cache API【这个我没用过&#xff0c;可以看官网&#xff0c;是实验性技术】Http 缓存头【通过expires 和 ca…

【python基础教程】print输出函数和range()函数的正确使用方式

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 print()有多个参数&#xff0c;参数个数不固定。 有四个关键字参数&#xff08;sep end file flush&#xff09;&#xff0c;这四个关键字参数都有默认值。 print作用是将objects的内容输出到file中&#xff0c;objects中的…

知名开发者社区Stack Overflow发布《2023 年开发者调查报告》

Stack Overflow成立于2008年&#xff0c;最知名的是它的公共问答平台&#xff0c;每月有超过 1 亿人访问该平台来提问、学习和分享技术知识。是世界上最受欢迎的开发者社区之一。每年都会发布一份关于开发者的调查报告&#xff0c;来了解不断变化的开发人员现状、正在兴起或衰落…

在Vue中使用Web Worker详细教程

1.什么是Web Worker? Web Worker 是2008年h5提供的新功能&#xff0c;每一个新功能都是为了解决原有技术的的痛点&#xff0c;那么这个痛点是什么呢&#xff1f; 1.1 JavaScript的单线程 JavaScript 为什么要设计成单线程&#xff1f; 这与js的工作内容有关&#xff1a;js只…

PiflowX-MysqlCdc组件

MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…

重点问题提问

mysql主从复制原理 slave每隔一段时间监听master&#xff0c;当master数据发生改变&#xff0c;master将数据写进二进制日志&#xff0c;slave开启一个io线程请求二进制日志&#xff0c;master在每个io线程上开启dump线程&#xff0c;将二进制日志传给slave&#xff0c;slave接…

JS 监听网络状态

我们在开发过程中会遇到监听用户网络状态的需求&#xff0c;通过JS可以获取当前的网络状态&#xff0c;包括下载速度、网络延迟、网络在线状态、网络类型等信息 具体获取如下&#xff1a; let info navigator.connection console.log(info)可以看到&#xff0c;包含几个信息…

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-03-访问控制及数字签名技术

文章目录 1. 访问控制技术1.1 基本模型1)访问控制模型访问控制的内容1.2 实现技术1)访问控制矩阵2)访问控制表3)能力表4)授权关系表2. 数字签名2.1 作用2.2 数字签名的条件2.2 对称密钥签名2.3 公开密钥签名1. 访问控制技术 1.1 基本模