代码随想录训练营-回溯03

用于记录为期60天的算法提升过程,今天是第27天

🕸️代码随想录训练营-回溯🕸️

  • 39. 🌸组合总和🌸
        • 思路:
        • 代码
  • 40. 🌸组合总和 II🌸
        • 思路
        • 代码:
  • 131. 分割回文串

39. 🌸组合总和🌸

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

思路:

回溯,水平遍历作为可选的路径方向,竖直方向用于深度递归,终止条件是子数字的和>=target。

代码

var( res [][] intpath []int
)
func combinationSum(nums []int, target int) [][]int {res,path = make([][]int,0),make([]int,0,len(nums))sort.Ints(nums)//方便剪枝dfs(nums,0,target)return res
}
func dfs(nums[]int, start int,target int){if target ==0{//触底 记录数组 反弹tmp:=make([]int,len(path))copy(tmp,path)res =append(res,tmp)return }for i :=start;i<len(nums);i++{//水平 方向if nums[i] >target{ break }//剪枝,提前终止path = append(path,nums[i])//加入新的路径元素dfs(nums,i,target-nums[i])//往下递归path = path[:len(path)-1]//不保存此次路径,用于同层}
}

40. 🌸组合总和 II🌸

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用 一次 。
注意:解集不能包含重复的组合。

思路

设置一个状态数组用来维护当前元素是否在层间被访问完毕,如果是边可以重复,如果是层则不能重复

代码:


var(res [][]intpath []intused []bool
)func combinationSum2(nums []int, target int) [][]int {res,path =make([][]int,0),make([]int,0)//used = make([]bool,len(nums))//多增加一个描述每一个下标元素状态的数组sort.Ints(nums)dfs(nums,0,target)return res
}func dfs(nums []int,start int,target int){if target ==0{tmp:=make([]int,len(path))copy(tmp,path)res = append(res,tmp)return}
//我可以在树的边上重复使用元素,但不能在树的层间重复使用元素for i:=start;i<len(nums);i++{if nums[i]>target{ break;}if i>0 && nums[i]==nums[i-1] && used[i-1] ==false{continue;}path = append(path,nums[i])used[i] = truedfs(nums,i+1,target-nums[i])used[i] = falsepath= path[:len(path)-1]}
}

131. 分割回文串

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

思路
感觉有点难理解,水平切 ,之后对切割完的串进行判断

//1,234   12,34  123,4  1234var (path []stringres [][]string
)func partition(s string) [][]string {path ,res = make([]string,0),make([][]string ,0)dfs(s,0)return res
}func dfs(s string ,start int){if start == len(s){tmp :=make([]string,len(path))copy(tmp,path)res = append(res,tmp)return }for i:= start;i <len(s);i++{str :=start:i+1]if isPalindrome(str){path = append(path,str)dfs(s,i+1)path = path[:len(path)-1]}}
}
func dfs(s string, start int) {if start == len(s) { // satrt = lentmp := make([]string, len(path))copy(tmp, path)res = append(res, tmp)return }for i := start; i < len(s); i++ {str := s[start : i+1]//1,234] 12,34] 123,4], [1234]if isPalindrome(str) {   // 判断切割的字符串path = append(path, str)dfs(s, i+1)         // 寻找i+1为起始位置的子串path = path[:len(path)-1]  // 回溯过程,弹出本次已经添加的子串}}
}func isPalindrome(s string) bool {for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {if s[i] != s[j] {return false}}return true
}go

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

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

相关文章

solidwords(6)

从右视图开始&#xff0c;分上下两部分 标题 这里的薄壁要留意一下怎么算的&#xff08;单向&#xff1a;默认向内&#xff1b;如果想向外记得选反向&#xff09;

企业Web安全治理的十三个要点

因为今天刚汇报了23年H1的工作内容&#xff0c;H1的内容和之前在CSDN发布帖子&#xff0c;但是经过了整理后的。基本上是比较全面和精练的。所以这里再列举一下相关情况&#xff0c;即安全治理的几个要点&#xff1a; 其实基本上的企业Web安全治理内容我总结为如下&#xff1a…

【Spring专题】Spring之Bean的生命周期源码解析——阶段二(二)(IOC之属性填充/依赖注入)

目录 前言阅读准备阅读指引阅读建议 课程内容一、依赖注入方式&#xff08;前置知识&#xff09;1.1 手动注入1.2 自动注入1.2.1 XML的autowire自动注入1.2.1.1 byType&#xff1a;按照类型进行注入1.2.1.2 byName&#xff1a;按照名称进行注入1.2.1.3 constructor&#xff1a;…

idea 新建servlet 访问提示404 WebServlet注解找不到包 报错

检查访问路径是否设置正确 如果设置为name “/testServlet”&#xff0c;则会404 WebServlet注解报错找不到包 检查是否引入了tomcat依赖包

线性代数的学习和整理8: 方阵和行列式相关(草稿-----未完成)

1.4.1 方阵 矩阵里&#xff0c;行数列数的矩阵叫做方阵方阵有很多很好的特殊属性 1.4.2 行列式 行列式是方阵的一种特殊运算如果矩阵行数列数相等&#xff0c;那么这个矩阵是方阵。行列数的计算方式和矩阵的不同只有方阵才有行列式行列式其实是&#xff0c;矩阵变化的一个面…

超越函数界限:探索JavaScript函数的无限可能

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4da; 前言 &#x1f4d8; 1. 函数的基本概念 &#x1f4df; 1.1 函数的定义和调用 &#x1f4df; 1.2 …

动态内存管理

目录 为什么要用动态内存开辟 动态内存有关函数 void* malloc (size_t size); void free (void* ptr); void* calloc (size_t num, size_t size); void* realloc (void* ptr, size_t size); C/C程序的内存开辟 柔性数组 特点&#xff1a; 柔性数组的使用&#xff1a; 为什么要用…

【nodejs】用Node.js实现简单的壁纸网站爬虫

1. 简介 在这个博客中&#xff0c;我们将学习如何使用Node.js编写一个简单的爬虫来从壁纸网站获取图片并将其下载到本地。我们将使用Axios和Cheerio库来处理HTTP请求和HTML解析。 2. 设置项目 首先&#xff0c;确保你已经安装了Node.js环境。然后&#xff0c;我们将创建一个…

搜索旋转排序数组

整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nums[1], …, …

学习笔记|基于Delay实现的LED闪烁|u16是什么|a--和--a的区别|STC32G单片机视频开发教程(冲哥)|第六集(上):实现LED闪烁

文章目录 摘要软件更新什么是闪烁Tips:u16是什么? 语法分析&#xff1a;验证代码Tips&#xff1a;a--和--a的区别&#xff08;--ms 的用法&#xff09;测试代码&#xff1a; 摘要 1.基于Delay实现的LED闪烁 2.函数的使用 3,新建文件&#xff0c;使用模块化编程 软件更新 打…

macOS(m1/m2)破解Sublime Text和Navicat16

破解Sublime Text 说明&#xff1a;全程使用的是终端操作 1. 下载Sublime Text&#xff0c;建议使用brew下载 2. 进入到下载的app的文件夹 cd "/Applications/Sublime Text.app/Contents/MacOS/"3. 执行以下操作以确认版本是否匹配 md5 -q sublime_text | grep -i…

Controllable Text Generation with Language Constraints

本文是LLM系列文章&#xff0c;针对《Controllable Text Generation with Language Constraints》的翻译。 具有语言约束的可控文本生成 摘要1 引言2 COGNAC基准3 方法4 实验设置5 结果6 相关工作7 结论不足 摘要 我们考虑在具有自然语言中指定的约束的语言模型中的文本生成任…

消息中间件的选择:RabbitMQ是一个明智的选择

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; MQ&#xff08;Message Queue&#xff09; MQ&#xff08;消息队列&#xff09;是一种用于在应用程序之间进行异步通信的技术&#xff1b;允许应用程序通过发送和接收…

css学习3(三种样式表与样式控制优先级)

1、外部样式表&#xff1a;当样式需要应用于很多页面时&#xff0c;外部样式表将是理想的选择。在使用外部样式表的情况下&#xff0c;你可以通过改变一个文件来改变整个站点的外观。每个页面使用 <link> 标签链接到样式表&#xff0c;也要放到<head>中。 2、外部…

上网课用什么耳机和麦克风,分享几款骨传导耳机上网课用

各位耳机狂热者&#xff0c;咱们都了解传统的蓝牙耳机相对于老式有线耳机来说确实方便得多。但是&#xff0c;也别忘了蓝牙耳机会导致耳道不断堵塞&#xff0c;引发细菌滋生等问题。好在近年来&#xff0c;骨传导耳机如火如荼地走红&#xff0c;解决了这些难题&#xff0c;简直…

学习Vue:过渡与动画效果

在Vue.js中&#xff0c;为了让页面更具有吸引力和交互性&#xff0c;您可以通过过渡和动画效果来提升用户体验。本文将介绍如何利用过渡类名实现动画效果&#xff0c;探讨Vue过渡的不同阶段&#xff0c;以及如何使用第三方动画库&#xff0c;如Animate.css&#xff0c;来实现更…

飞天使-jenkins进行远程linux机器修改某个文件的思路

文章目录 jenkins配置的方式jenkins中执行shell的思路 jenkins配置的方式 jenkins中执行shell的思路 下面的脚本别照抄&#xff0c;只是一个思路 ipall"$ips"# 将文本参数按行输出为变量 while IFS read -r line; doecho "$line" if [[ ! -z $line ]] &…

ubuntu 22.04 LTS 在 llvm release/17.x 分支上编译 cookbook llvm example Chapter 02

不错的资料&#xff1a; LLVMClang编译器链接器--保值【进阶之路二】 - 掘金 —————————————————————————————————————— 下载 llvm-cookbook example: $ git clone https://github.com/elongbug/llvm-cookbook.git 也可以参照llvm-pr…

java 线程池实现多线程处理list数据

newFixedThreadPool线程池实现多线程 List<PackageAgreementEntity> entityList new CopyOnWriteArrayList<>();//多线程 10个线程//int threadNum 10;int listSize 300;List<List<PackageAgreementDto>> splitData Lists.partition(packageAgre…

Vue实现动态遍历生成el-input

实现效果: el-input的label是measureName, el-input绑定的值是formDatat.measureCode 接口返回的数据格式如下 处理过的formData的格式如下