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怎样运营短视频?

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

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)一直是低水平视觉领域不可或缺的一项具有挑战性的任务&…

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

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

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

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

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

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

Windows商店引入SUSE Linux Enterprise Server和openSUSE Leap

在上个月的Build 2017开发者大会上,微软宣布将SUSE,Ubuntu和Fedora引入Windows 商店,反应出微软对开放源码社区的更多承诺。 该公司去年以铂金会员身份加入Linux基金会。现在,微软针对内测者的Windows商店已经开始提供 部分Linux发…

pbootcms系统安全防护设置大全

PbootCMS系统简介 PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统,是一套高效、简洁、 强悍的可免费商用的PHP CMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站…

ElasticSearch - 海量数据索引拆分的一些思考

文章目录 困难解决方案初始方案及存在的问题segment merge引入预排序 拆分方案设计考量点如何去除冗余数据按什么维度拆分,拆多少个最终的索引拆分模型演进历程整体迁移流程全量迁移流程流量回放比对验证异步转同步多索引联查优化效果 总结与思考参考 困难 索引数据…

hive表的全关联full join用法

背景:实际开发中需要用到全关联的用法,之前没遇到过,现在记录一下。需求是找到两张表的并集。 全关联的解释如下; 下面建两张表进行测试 test_a表的数据如下 test_b表的数据如下; 写第一个full join 的SQL进行查询…

keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群

一、环境准备 1. 我这里准备了三台centos7 虚拟机 主机名主机地址软件node-01192.168.157.133rabbitmq、erlang、haproxy、keepalivednode-02192.168.157.134rabbitmq、erlang、haproxy、keepalivednode-03192.168.157.135rabbitmq、erlang 2. 关闭三台机器的防火墙 # 关闭…

合并两个链表

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 比如以下例子: 题目接口: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListN…