8/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.mzph.cn/news/53819.shtml

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

相关文章

自定义loadbalance实现feignclient的自定义路由

自定义loadbalance实现feignclient的自定义路由 项目背景 服务A有多个同事同时开发,每个同事都在dev或者test环境发布自己的代码,注册到注册中心有好几个(本文nacos为例),这时候调用feign可能会导致请求到不同分支的服务上面,会…

React(7)

1.React Hooks 使用hooks理由 1. 高阶组件为了复用,导致代码层级复杂 2. 生命周期的复杂 3. 写成functional组件,无状态组件 ,因为需要状态,又改成了class,成本高 1.1 useState useState();括号里面处的是初始值;返回的是一个…

【算法系列 | 7】深入解析查找算法之—布隆过滤器

序言 心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第3讲,讲一…

stm32之8.中断

(Exceptions)异常是导致程序流更改的事件,发生这种情况,处理器将挂起当前执行的任务,并执行程序的一部分,称之为异常处理函数。在完成异常处理程序的执行之后,处理器将恢复正常的程序执行&#…

python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)

pythonTensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本) 一:TensorFlow基础知识内容部分(简明扼要,快速适应)1、下载Cifar10数据集,并进行解压缩处理2、将Cifar10数据…

WebSocket详解以及应用

😜作 者:是江迪呀✒️本文关键词:websocket、网络、长连接、前端☀️每日 一言:任何一个你不喜欢而又离不开的地方,任何一种你不喜欢而又无法摆脱的生活,都是监狱! 一、前言 我们在…

C#-集合小例子

目录 背景: 过程: 1.添加1-100数: 2.求和: 3.平均值: 4.代码:​ 总结: 背景: 往集合里面添加100个数,首先得有ArrayList导入命名空间,这个例子分为3步,1.添加1-100个数2.进行1-100之间的总和3.求总和的平均值&…

如何把本地项目上传github

一、在gitHub上创建新项目 【1】点击添加()-->New repository 【2】填写新项目的配置项 Repository name:项目名称 Description :项目的描述 Choose a license:license 【3】点击确定,项目已在githu…

数据结构数组栈的实现

Hello,今天我们来实现一下数组栈,学完这个我们又更进一步了。 一、栈 栈的概念 栈是一种特殊的线性表,它只允许在固定的一端进行插入和删除元素的操作。 进行数据的插入和删除只在栈顶实现,另一端就是栈底。 栈的元素是后进先出。…

四川玖璨电商:2023怎样运营短视频?

​短视频的兴起和流行让越来越多的人关注和运营短视频号。如何运营短视频号,吸引更多的观众和粉丝?下面四川玖璨电商小编将介绍几个关键点。 首先,确定短视频的定位和主题非常重要。根据自己的兴趣和特长,确定一个独特的主题&…

Linux学习-keepalived实现LVS高可用

Keepalived实现LVS高可用 环境准备 环境说明:LVS-DR模式 client1:eth0->192.168.88.10 lvs1:eth0->192.168.88.5 lvs2:eth0->192.168.88.6 web1:eth0->192.168.88.100 web2:eth0->192.16…

Python最新面试题汇总及答案

一、基础部分 1、什么是Python?为什么它会如此流行?Python是一种解释的、高级的、通用的编程语言。Python的设计理念是通过使用必要的空格与空行,增强代码的可读性。它之所以受欢迎,就是因为它具有简单易用的语法 2、为什么Pytho…

【算法系列总结之分组循环篇】

【算法系列总结之分组循环篇】 分组循环1446.连续字符1869.哪种连续子字符串更长1957.删除字符使字符串变好2038.如果相邻两个颜色均相同则删除当前颜色1759.统计同质子字符串的数目2110.股票平滑下跌阶段的数目1578.使绳子变成彩色的最短时间1839.所有元音按顺序排布的最长子字…

自动驾驶——最优控制算法(LQR)工程化总结

时隔一年,从写下第一篇博文自动驾驶-LQR工程实现(调研),到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”的阶段、再到…

Diffusion Models for Image Restoration and Enhancement – A Comprehensive Survey

图像恢复与增强的扩散模型综述 论文链接:https://arxiv.org/abs/2308.09388 项目地址:https://github.com/lixinustc/Awesome-diffusion-model-for-image-processing/ Abstract 图像恢复(IR)一直是低水平视觉领域不可或缺的一项具有挑战性的任务&…

vue helloworld.vue 点击按钮弹出 dialog,并给dialog传值

1 DataAnalysisVue.Vue -->应该组件文件名和 name: 的名字一致 <template><div><el-dialog :title"dataAnalysisMsg" :visible.sync"dataAnalysisvalue" :before-close"handleClose"><span>{{ dataAnalysisMsg }}&l…

Oracle 19c 启动和关闭实例保存PDB状态

简介&#xff1a; 十年以上 MySQL Oracle DBA从业者&#xff0c;MySQL 5.7 OCP&#xff0c; 微信号: jinjushuke 当前有一个PDB 打开模式为READ WRITE [oracleDGMOGGM19C ~]$ sql sys192.168.3.107:1521/pdb1 as sysdba SQLcl: Release 19.1 Production on Wed Aug 23 10:19:…

excel中如果A列中某项有多条记录,针对A列中相同的项,将B列值进行相加合并统计

excel中如果A列中某项有多条记录&#xff0c;针对A列中相同的项&#xff0c;将B列值进行相加合并统计。注意&#xff1a;B列的数据类型要为数字 如&#xff1a; 实现方法&#xff1a; C1、D1中分别输入公式&#xff0c;然后下拉 IF(COUNTIF($A$1:A1,A1)1, A1,"") …

C++:构造方法(函数);拷贝(复制)构造函数:浅拷贝、深拷贝;析构函数。

1.构造方法(函数) 构造方法是一种特殊的成员方法&#xff0c;与其他成员方法不同: 构造方法的名字必须与类名相同&#xff1b; 无类型、可有参数、可重载 会自动生成&#xff0c;可自定义 一般形式:类名(形参)&#xff1b; 例: Stu(int age); 当用户没自定义构造方法时&…

光伏发电+boost+储能+双向dcdc+并网逆变器控制(低压用户型电能路由器仿真模型)【含个人笔记+建模参考】

MATALB代码链接&#xff1a;光伏发电boost十储能十双向dcdc十并网逆变器 个人笔记与建模参考请私信发送 包含Boost、Buck-boost双向DCDC、并网逆变器三大控制部分 boost电路应用mppt&#xff0c; 采用扰动观察法实现光能最大功率点跟踪 电流环的逆变器控制策略 双向dcdc储能系…