回溯算法
文章平均质量分 64
水番茄
这个作者很懒,什么都没留下…
展开
-
剑指offer12矩阵中的路径刷题打卡
回溯+深度优先遍历简单易懂做法原创 2023-04-19 11:27:21 · 160 阅读 · 0 评论 -
leetcode401二进制手表刷题打卡
表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。串,而且分钟需要格式化输出,不足两位的前面要补零,我用的方法是使用头文件。这就是本题被扒光的情景,接下来就是根据题意一点一点的加限制条件。个数字,不能重复,就这么简单直接就可以用回溯枚举,伪代码如下。每个 LED 代表一个 0 或 1,最低位在右侧。这道题被扒光了构造回溯抽象树太简单了,就不画了。这十个数就是上图二进制手表上的数字,用一个。,底部的 6 个 LED 代表。首先抛开字符串,抽象题目,从。的时候就可以开始处理返回了。原创 2022-10-24 23:32:24 · 112 阅读 · 0 评论 -
leetcode51N皇后刷题打卡
row参数在每次递归的时候都 + 1,使其进入下一层的选择,以往的题都是一维的,用startindex来控制后移节点,对应代码如下。这个棋盘是一个二维矩阵,对于二维矩阵的回溯,外层for循环用于选择某行中的某一列,内部递归用于选择下一行中的某一列,假设输入样例为。的地方开始,且每一行只会选择一个位置,因此不必判断同一行上是否有节点,而且也只用考虑上半区对应位置是否有。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。循环中的筛选条件,筛选规则是该点的十字路径和左。原创 2022-10-24 12:56:03 · 95 阅读 · 0 评论 -
回溯方法总结
循环内部没有任何筛选条件,所有回溯的题目都是在此基础上加条件进行节点的删除,全排列这道题就是加了。循环中嵌套递归,这就是回溯的基本格式,最重要的就是将其抽象为一颗树,固定一个根节点,就拿。数组,回溯操作就是在其中取值加入另一设好的path集合,将其作为节点,令节点的内容就是。循环的话就发现他遍历了树的宽度,我们可以猜测,递归则就是遍历数的深度,接下来我将。参数是拿来干什么的呢,其实也是删除一些节点,他就是令每个父节点下遍历子节点时。数组,目的在于去除同一路径下的相同位置的节点,删除的节点如下图所示。原创 2022-10-23 13:51:32 · 329 阅读 · 0 评论 -
leetcode332重新安排行程刷题打卡
对目的地进行排序,这样就自然的对答案进行按字典排序自然的就是最小,并增加一个引用计数,为。为起始地选择目的地,由于使用的map来保存目的地,所以会以字典序从小到大自动排序,外层。假定所有机票至少存在一种合理的行程。的二维数组,其中每个元素都是一个存放string的数组,所以以这种形式的增强。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。数组中的元素个数,在终止条件中会有用的,每次进入回溯会对。已经自动排序,所以第一个返回的题解一定是最小字典序的。,无需有判断答案是最小字典序,根据前面的说法,原创 2022-10-23 13:44:27 · 668 阅读 · 0 评论 -
leetcode47全排列2刷题打卡
给定一个可包含重复数字的序列nums,返回所有不重复的全排列。本题相较于全排列1多了序列里面可以包含重复数字的条件,这样一来全排列的解就会包含重复的解,就要求我们针对这个重复设计方法,findcontinue[1,1,2]booltrue参照,使用局部集合来去掉同一层上的重复结点。确定参数和返回值used确定终止条件全排列每个解的大小一定等于nums数组的大小,所以返回条件是只要path大小等于了nums,无需写确定本层逻辑。原创 2022-10-18 11:06:05 · 312 阅读 · 0 评论 -
leetcode46全排列刷题打卡
关于同一树枝中不能使用相同结点的解决办法。数组的大小,所以返回条件是只要。给定一个不含重复数字的数组。全排列每个解的大小一定等于。原创 2022-10-17 15:11:09 · 215 阅读 · 0 评论 -
leetcode491递增子序列刷题打卡
给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中。你可以按返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。原创 2022-10-16 22:11:28 · 350 阅读 · 0 评论 -
leetcode90子集2刷题打卡
子集一题,在原数组中多了重复的数字,这就导致了子集一定有重复的,而题解要求不能有重复的,因此在回溯中需要用到一种方法,增加一个。被枚举过,反之没有被枚举过。于是在回溯的外层for循环中可以加一个去重的条件,判定。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。返回的解集中,子集可以按。相同,本题就是多了一个去重的步骤。索引位置处值相同且被使用过就。数组相同,全体初始化为。原创 2022-10-15 18:13:21 · 96 阅读 · 0 评论 -
leetcode78子集刷题打卡
利用回溯进行组合,外层for循环遍历宽度,递归遍历深度,输入样例是[1, 2, 3],子集不能有重复的元素,所以要在函数参数中加入。来作为深度中的起始位置,每次进入递归都要( + 1),返回该数组所有可能的子集(幂集)。原创 2022-10-13 12:53:02 · 84 阅读 · 0 评论 -
leetcode93复原 IP 地址刷题打卡
本题是给定一个字符串,将其还原为IP地址,可以将其划为分割问题,分割问题就可以用回溯算法来穷举所有目标项。达到了3才会进入终止条件,然后就顺其自然的查看最后一个点后的数是否合格来决定是否加入结果目录。循环遍历宽度,递归遍历深度。其他解释不了勒,成为高高手了在来描述,现在很难描述出来,循环里面套一个递归,整个回溯可以抽象成一个树形结构,本层逻辑也就是回溯逻辑,根据模板,其通常都是一个。,用以表示一个 IP 地址,返回所有可能的。回溯就是递归,可以按照递归三步走。,这些地址可以通过在。原创 2022-10-13 01:16:20 · 677 阅读 · 0 评论 -
leetcode131分割回文串刷题打卡
本题涉及截取子串,所以要增加一个参数,用来表示开始截取的位置。循环 -> 一定会出一个结果,就是每个字符单独的时候也就是。当截取的开始位置大于等于了字符串长度,则将其加入到。回溯也是递归,所以也可以按照递归三步走。分割成一些子串,使每个子串都是。是正着读和反着读都一样的字符串。直接给出核心代码 我解释他们的意思。,形成第二种结果,在最后一次外层。所有可能的分割方案。回溯算法不需要返回值。本层逻辑其实就是确定。等于0的时候的那一层。字符,之后再添加一个。原创 2022-10-10 22:21:11 · 221 阅读 · 0 评论