回溯算法
无
47u1
好好学算法!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode78:子集
在if里面,因为这个如果在if里面的话,那么每次都需要判断这个开始值大于nums.size()才能到result这个里面,也就是说,你的最终结果,是没有1, 2, 3 ,12 ,13等等的值的。结束条件:当这个开始值startindex大于数组的大小的话,也就是说当前已经遍历完了。这个时候就可以停止了。单层循环:这个里面就大有讲究,这个里面就是遍历到每一个值的时候,都需要把当前的值加入到path里面。这个题目就不是分割问题了,这个题目就是子集的问题,就是需要把每一个属于它的集合给列出来,包括空的。原创 2024-11-19 14:55:23 · 383 阅读 · 0 评论 -
LeetCode93:复原IP地址
单层循环:如果当前分割到i的话符合条件,那么就插入一个'.',因为ip地址有三个'.'嘛所以就当到达那个位置的时候,就加上一个点就行。结束条件:当pointsum等于3个的时候,那么我们就可以停止了。这个时候我们在去判断一下这个整体的ip地址,看看是否符合条件。这个题目仍然是用的回溯算法,首先就需要抽象成一棵树,我们发现这个树,其实也就是分割字符串的类型题。参数的设定:需要s这个字符串,分割位置startindex,小数点的数量pointsum。原创 2024-11-19 14:49:29 · 257 阅读 · 0 评论 -
LeetCode131:分割回文串
这个题目其实就是需要去做一个分割操作,用什么来表示分割的线呢?其实就是startindex这个值。当把这个回溯抽象成一棵树的时候,我们不难看出来,这个题目需要对于分割的把握严格。单层循环语句:这个就是从你分割的这个位置开始去遍历,用i++来往后面去判断这个是否回文。结束条件:如果你当先的分割线已经大于s这个字符串的大小了,那么就可以退出来了。参数的设定:这里需要string s, startindex这两个就好。最后:还需要编写一个回文的函数。原创 2024-11-19 14:43:26 · 315 阅读 · 0 评论 -
LeetCode40:组合总数II
这个题目和上一个组合分析不一样的是,这个题目每个数只能用一次,所以这个需要先对数组进行排序,为什么要排序呢,因为当你抽象成一个数的时候,这个时候如果不排序的话,那么你会得到之前就已经得到过的数组。单层循环语句:里面就是需要对于排序过的数组进行标记,比如[1, 1, 2],那么这个时候就特别需要注意这个1,1,不要让这个两个重复出现了。参数的设定:1.需要原数组,2.需要目标值,3.需要总和sum,4.需要bool类型的数组,用来标记。原创 2024-11-19 14:37:58 · 281 阅读 · 0 评论 -
LeetCode39:组合总和
这个代码其实就是和前面的组合总是是一样的,但是呢,主要一点是,这个for循环里面的backtracking的不是i + 1了,而是i,因为当前i可以去取当前的元素,而i + 1是不能去当前的元素的。原创 2024-11-17 16:06:38 · 344 阅读 · 0 评论 -
LeetCode17:电话号码的字母组合
这个题目也就是先使用一个映射定义好字符与数字的映射关系,然后再根据回溯三部曲来去写这个题目。原创 2024-11-17 15:26:05 · 364 阅读 · 0 评论 -
LeetCode77:组合(剪枝操作)
实际上这个代码没做什么改变,其实就是在原来的单层循环里面的区间(startIndex,n)这个区间做文章,也就是在这个里面去做一个剪枝的操作。什么是剪枝呢,也就是把一个题目抽象做一个树的话,那么我们再去寻找一些本来就已经知道不符合的条件了,再去做一个算法的剪枝操作即可。原创 2024-11-16 14:50:46 · 358 阅读 · 0 评论 -
LeetCode77:组合
这个题目其实也就是一个很经典的一个回溯算法题目,回溯有三部曲,第一个就是确定要传进去的参数,第二个就是需要确定结束条件,第三个就是写进入单层循环的条件语句。原创 2024-11-16 14:46:58 · 346 阅读 · 0 评论
分享