8/26 回溯法 周总结 记录个人的想法

news2024/11/17 13:52:26

DAY1

77. 组合

这道题是经典的回溯题,

递归函数参数和返回值显而易见

终止条件是path.size()==k

递归逻辑,需要理解每次调用回溯的startIndex的含义,图解:

 

DAY2

216. 组合总和 III:这道题与77题作类比:

  77:1-n,k个数,求组合

  216:1-9,k个数,和为n,求组合

此题相比77题思路多了一个要求是求和。其他无二致

1.递归函数:依旧要注意的是当前层的startIndex等于上一层的i+1

2.终止条件:如果当前为第k层且此时path中元素的和等于targetSum,那么将此path添加到res中,(不管当前在第几层)如果当前path中元素的和大于targetSum,return

3.递归逻辑:

与77题基本一致,但是要注意的是回溯的时候要把新加入path的元素移除,同时path元素和要减去移除的元素哦

17. 电话号码的字母组合:第一次做思路完全想不到,只能说第一遍理解思路,争取下次能写一点

DAY3

​​​​​​39. 组合总和:nums数组没有重复元素,每个元素可以重复使用无限次,找出目标和为target的组合

1.递归函数参数和返回值,注意这道题可以先对nums数组进行排序,然后参数中含有startIndex,如果是有序数组,那么再遍历到一处是path元素之和大于target,那么后面就都不用考虑了。

同时要注意当前层的startIndex等于上一层的i,而不用i+1,因为元素是可以无限次使用的

2.递归终止条件:如果此时path中元素的和等于target,那么将此path添加到res中然后return,如果当前path中元素的和大于target,return(相当于剪枝)

3.递归逻辑:和216的递归逻辑一致

40. 组合总和 II:和39相比是每个元素只能用一次,nums中有重复元素,要找出目标和为target的组合,且结果集需要去重

1.递归函数参数和返回值,注意这道题可以先对nums数组进行排序,然后参数中含有startIndex,如果是有序数组,那么再遍历到一处是path元素之和大于target,那么后面就都不用考虑了。

同时要注意当前层的startIndex等于上一层的i+1(这是和39题的一个小区别),因为每个元素只能使用1次

2.递归终止条件:同39题

3.递归逻辑:这里涉及到去重操作,引入一个used数组,因为同一树层不可以有相同元素,但是同一树枝可以有,我们通过used[i-1]来判断是在树枝还是树层遍历了相同元素,如果used[i-1]是false说明就是同一树层,否则说明是在树枝。是怎样理解的呢?

因为如果一直递归一直递归就说明是在同一树枝,used[i]始终是true,当回溯到上一个树层时候才会有used[i]=false

还是有很多要思考的地方

131. 分割回文串

这道题要思考的点是:切割+判断是否为回文串

这道题学到的是关于回溯是如何调用的,

下面是个人理解的回溯调用过程(有问题望指正,感激不尽)

DAY4

93. 复原 IP 地址:分割字符串成4个子串,每个子串要判断是否符合IP规范(写一个isValid方法 )

1.递归函数:当前层的startIndex是上一层的i+2(要考虑逗点的存在)

2.终止条件:如果分割次数==3,说明已经完成了分割成4个子串的任务,同时要检查最后一个子串是否有效,是则将其添加到path,否则return。

3.递归逻辑:注意逗点的插入会影响下一次递归的初始下标

isValid()方法:开头为0的字段不行,大小超过255的字段不行

78. 子集:nums中元素互不相同,求不重复的所有子集(包括空集)。求取子集问题,不需要任何剪枝,因为子集就是要遍历整棵树。

1.递归函数,参数是nums数组和startIndex,返回值是void

2.终止条件,当剩余集合为{}即,startIndex>=nums.length时,说明没有元素可取了

3.递归逻辑,注意点是元素不重复取,因此backtracking(nums,i+1);注意这里的i+1

90. 子集 II:和79题区别是nums可能包含重复元素,求不重复的所有子集(包括空集)。本题要解决:去重+组合

强调去重就要对nums数组排序,方便记录当前树层是否使用相同元素,如果使用了,要跳过

做完这道题回头看40.也可以不必用到used数组

DAY5

491. 递增子序列:找出所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。

这道题不能对原数组nums进行sort,

1.递归函数:求子序列,很明显一个元素不能重复使用,所以需要startIndex,调整下一层递归的起始位置

2.终止条件:如果是path.size()>1那么添加到结果集res中;也可以不加终止条件,startIndex每次都会加1,并不会无限递归。

3.递归逻辑:这里需要一个去重判断,同一父节点下的同层上使用过的元素就不能再使用了

46. 全排列: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列

这道题的for循环每次i=0开始

1.递归函数

首先排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合,需要一个used数组标记已经选择的元素

2.终止条件

如果path的大小等于nums的长度,加入到res并return

3.递归逻辑

注意这里的for循环每次从0开始,因为这里要找的是全排列

47. 全排列 II:相比46题,这道题nums数组中可能有重复元素,因此需要去重,如果

1.递归函数

需要used数组判断始终同树枝还是同层遇到相同元素

2.终止条件

同46题

3.递归逻辑

 同层不能选相同的数字

            used[i - 1] == true,说明同一树枝nums[i - 1]使用过

            used[i - 1] == false,说明同一树层nums[i - 1]使用过,要跳过

同时要判断used[i]是否为false,为false才说明是同树枝才能够将当前元素添加到path中

还没写完,就是说需要把每道题的回溯过程整理一遍,但今天好累,先这样明天再来。

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

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

相关文章

剪绳子c、c++实现

给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长的 m 段&#xff08; m 、 n 都是整数&#xff0c; n > 1 并且 m > 1 &#xff0c; m < n &#xff09;&#xff0c;每段绳子的长度记为 k[1],...,k[m] 。请问 k[1]*k[2]*...*k[m] 可能的最大乘积是多少&#x…

【MySQL系列】表的内连接和外连接学习

「前言」文章内容大致是对MySQL表的内连接和外连接。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、内连接二、外连接2.1 左外连接2.2 右外连接 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;前面篇章学习的…

ctfshow-web-红包题第六弹

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先跑一下字典&#xff0c;这里用的dirmap,可以看到有一个web.zip 下载下来之后发现是一个网站备份&#xff0c;备份的是check.php.bak 然后接着看&#xff0c;可以看到这里不太可能是sql注入&#xff0c;有…

650V 1200V碳化硅二极管MOS管规格书参数,6A 8A 10A 15A 20A 封装TO220低VF电压 低内阻特性

650V碳化硅二极管6A 8A 15A提供样品 650V 40毫欧超结COOL MOS提供样品 650V 超结COOL MOS资料 国产替代 650V 1200V碳化硅二极管技术资料

Windows 10 文件夹自定义分组

通过配置desktop.ini文件可实现文件夹简单分组&#xff0c;此方法需配置每一个文件夹。 效果如下 1、文件夹设置取消隐藏系统文件 2、文件配置&#xff0c;以test文件夹为例。进入test文件夹&#xff0c;新建txt文件重命名 desktop.ini 注意是否开启显示文件后缀名否则修改后还…

手把手教你从0开始部署Kubernetes(K8s 1.28.x)---超详细

目录 一、基础环境配置&#xff08;所有主机均要配置&#xff09; 1、配置IP地址和主机名、hosts解析 2、关闭防火墙、禁用SELinux 3、安装常用软件 4、配置时间同步 5、禁用Swap分区 6、修改linux的内核参数 7、配置ipvs功能 二、容器环境操作 1、定制软件源 2、安…

接口测试时遇到接口加密了该如何处理?

对明文编码生成信息摘要&#xff0c;以防止被篡改。比如MD5使用的是Hash算法&#xff0c;无论多长的输入&#xff0c;MD5都会输出长度为128bits的一个串。摘要算法不要秘钥&#xff0c;客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。 对称加密 对称加密…

不同子网络中的通信过程

从输入www.baidu.com经历了什么 一、DNS&#xff08;网址->IP&#xff09; 二、ARP&#xff08;IP->MAC&#xff09; A->B&#xff1a;有数据发送&#xff0c;数据封装ip之后发现没有主机B的mac地址。然后ARP在本网段广播&#xff1a;检查目标地址和源地址是否在同一…

多头自注意力机制的代码实现

文章目录 1、自注意力机制2、多头注意力机制 transformer的整体结构&#xff1a; 1、自注意力机制 自注意力机制如下&#xff1a; 计算过程&#xff1a; 代码如下&#xff1a; class ScaledDotProductAttention(nn.Module):def __init__(self, embed_dim, key_size, value_…

Pandas数据分析教程-描述性统计量

pandas基础介绍-命令模版 描述性统计量pandas 统计函数相关与协方差唯一值&#xff0c;频次统计,成员关系1. Series.unique()2. Series/DataFrame/array.value_counts()3. Series.isin()4. get_indexer() 索引对应转换 本文介绍pandas中一些常用的描述性统计量相关知识&#xf…

【考研数学】线性代数第四章 —— 线性方程组(2,线性方程组的通解 | 理论延伸)

文章目录 引言四、线性方程组的通解4.1 齐次线性方程组4.2 非齐次线性方程组 五、方程组解的理论延伸 引言 承接前文&#xff0c;继续学习线性方程组的内容&#xff0c;从方程组的通解开始。 四、线性方程组的通解 4.1 齐次线性方程组 &#xff08;1&#xff09;基础解系 —…

从“芯”出发,国产IDE来了?网友:VS Code 姊妹款?

点击上方“程序猿技术大咖”&#xff0c;关注并选择“设为星标” 回复“加群”获取入群讨论资格&#xff01; 昨天日本核污水排放刷屏&#xff0c;今天却被一条github issues 霸屏&#xff1a;Vscode&#xff0c;你们是否与中国合作过&#xff1f;&#xff08;Vscode, have you…

22.查找,线性表的查找

目录 一. 查找的基本概念 二. 线性表的查找 &#xff08;1&#xff09;顺序查找&#xff08;线性查找) &#xff08;2&#xff09;折半查找&#xff08;二分或对分查找&#xff09; &#xff08;3&#xff09;分块查找 一. 查找的基本概念 查找表是由同一类型的数据元素(…

深度学习11:Transformer

目录 什么是 Transformer&#xff1f; Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer&#xff08;微软研究院笨笨&#xff09; RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer&#xff1f; ​ …

python下timer定时器常用的两种实现方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说&#xff0c;直接开搞&#xff0c;如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 方法一&#xff0c;使用线程中现成的&#xff1a; 这种一般比较常用&#xff0c;特别是在线程中的使用方法&#xff0c;下…

python3GUI--PyQt5打包心得(详细图文演示)

文章目录 一&#xff0e;前言二&#xff0e;准备工作&介绍1.准备2.介绍1.pyinstaller2.pipenv 三&#xff0e;项目打包1.准备2.打包1.打包参数2.虚拟环境 三&#xff0e;总结 一&#xff0e;前言 有朋友私信问我&#xff0c;如何把项目打包和如何减小打包后的文件体积。笔…

HarmonyOS应用开发者高级认证练习题

系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 本文所有内容来源于个人进行HarmonyOS应用开发者系列认证的学习过程中所做过的练习题&#xff0c;所有答案均是个人作答&#x…

深度学习4. 循环神经网络 – Recurrent Neural Network | RNN

目录 循环神经网络 – Recurrent Neural Network | RNN 为什么需要 RNN &#xff1f;独特价值是什么&#xff1f; RNN 的基本原理 RNN 的优化算法 RNN 到 LSTM – 长短期记忆网络 从 LSTM 到 GRU RNN 的应用和使用场景 总结 百度百科维基百科 循环神经网络 – Recurre…

css滚动条样式这样修改下很漂亮

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>滚动条样式修改下很漂亮(不支持IE)</title> <style type"text/css"> * { margin: 0; padding: 0; } .box { width: 300px; height: 100px; margin…

Linux系统编程:线程控制

目录 一. 线程的创建 1.1 pthread_create函数 1.2 线程id的本质 二. 多线程中的异常和程序替换 2.1 多线程程序异常 2.2 多线程中的程序替换 三. 线程等待 四. 线程的终止和分离 4.1 线程函数return 4.2 线程取消 pthread_cancel 4.3 线程退出 pthread_exit 4.4 线程…