- 博客(59)
- 收藏
- 关注
原创 代码随想录 回溯—电话号码的字母组合
path存digits转字符串时各个数字的组合,相当于path是digits.size()大小的字符串,result里就是所有的组合了。用一个string类型的数组来存各个数字所对应的字符串。递归里index代表共有几个数字,再看注释即可。
2024-04-21 15:40:37
257
原创 代码随想录 回溯—组合总和Ⅲ
还是回溯三部曲,但要注意的是在返回参数时还要多加上一个sum进行总和的限定,在push到result里的判定条件有两个,一个是总和为n,一个是数字个数满足k个。在for循环里就是递归了,常规操作,见上一篇即可。
2024-04-18 19:43:00
269
原创 代码随想录 回溯—组合
result存组合结果,path存一个结果生成的路径,回溯函数的参数除了所传进去的n和k,还要传进一个起始点startIndex,这就是确定了参数返回值;if()确定终止条件;for循环里先把当前节点push进path,再进行递归,最后pop出来,给后面的节点pop进留位子。最后返回result。
2024-04-18 17:22:20
254
原创 代码随想录 二叉树—二叉搜索树的最小绝对差
和上题一样,通过中序遍历成一个由小到大排序的数组,这样再通过for循环将较小值放进result里,最后返回result即可。
2024-04-17 22:26:39
140
原创 代码随想录 二叉树—验证二叉搜索树
如果用中序来验证是否是二叉搜索树,那就只用验证中序是否是由小到大的数组,且元素不相同。左右子树还是递归构建,中操作是把值压入数组。
2024-04-15 13:23:01
357
原创 代码随想录 二叉树—二叉搜索树中的搜索
当节点为空或者等于目标值,直接返回。由于是二叉搜索树,特点是左子树的值都小于根节点值,右子树的值均大于根节点,那么,左右子树的构建可以通过值的判断来递归调用。
2024-04-15 12:42:48
292
原创 代码随想录 二叉树—最大二叉树
只要构造二叉树,就是前序遍历的方式。如果只有一个节点,就直接返回。循环遍历记录最大的值和最大值的下标,根据下标来决定左子树的构建和右子树的构建,这两个构建直接用递归。
2024-04-14 19:42:16
528
原创 代码随想录 二叉树—路径总和
用pair存放节点和到这个节点的路径和,层次遍历从上到下,路径和就是积累出来的。判断条件就是首先是叶子节点再是路径和匹配。
2024-03-22 16:11:48
205
原创 代码随想录 二叉树—左叶子之和
如何判断是否是左叶子?首先左叶子是父节点的左孩子,其次,左叶子没有孩子,那就可以追根溯源,找它的父节点,如果父节点的左孩子不为空(也就是右左孩子),且父节点的左孩子的左右孩子不存在(也就是左叶子没有孩子),就可以判断父节点的左孩子是左叶子。
2024-03-22 15:00:27
166
原创 代码随想录 二叉树—二叉树的所有路径
路径从上到下,可以理解为深度,那么我们用前序遍历的方式,中左右。先把中进行遍历,加入到path,如果左右孩子都为空那么相当于到了叶子节点了,那就把path加到resul里,进行回溯。
2024-03-19 14:01:06
225
原创 代码随想录 二叉树—平衡二叉树
高度是自下而上来算,深度是自上而下像钻井一般。那这里用后序遍历,左右中。先处理左子树,这里的-2作为信号,换成别的负数也没问题。如果左子树就不是平衡二叉树,那就继续把-2信号返回,再处理右子树同理。最后处理中间,判断左右子树的高度差,如果大于1,就继续返回-2信号,如果小于等于1就返回父节点的高度,即1+左右子树较大值。与高度相关的用后序遍历,与深度相关的用前序遍历。
2024-03-18 22:12:25
363
原创 代码随想录 二叉树—N叉树的最大深度(递归)
只要是n叉树,一定会有遍历孩子节点的部分,直接for(int i=0;i++)即可,在这个循环里递归。
2024-03-18 14:54:22
205
原创 代码随想录 二叉树—二叉树的最大深度
depth初始为0,要是有子孩子就depth加1,循环过了之后最后一个没子孩子,depth也会加1,弥补了先开始的0。简单题,模板略微改一点。
2024-03-16 21:11:14
227
原创 代码随想录 二叉树—在每个树行中找最大值
找最大值,那最后的结果是一个一维数组,那么result就不用跟模板一样设置成二维的,既然找最大的,那就把max初值设置为INT_MIN,这个知识点就记下来吧。
2024-03-16 18:44:19
280
原创 代码随想录 二叉树—N叉树的层次遍历
N叉树相比于模板题的区别在于,孩子节点是多个,而不是只有0个1个或者2个,那就单独写一个循环把孩子扔到队列里去,做同样的处理。
2024-03-16 18:33:07
338
原创 代码随想录 二叉树—二叉树的层平均值
就是在每层遍历的时候,把值存在sum里,最后push到result里时取个平均值,注意定义vector时类型是double。还是最初二叉树的模板略加改动。
2024-03-13 19:43:53
149
原创 代码随想录 二叉树—二叉树的右视图
由于一层一层放进去是先左孩子再是右孩子,也就是从左到右的放入,那么右视图也就是看到的是每一层的最后的一个元素,那就只把每层最后一个元素放入result就可以。
2024-03-13 19:31:12
136
原创 代码随想录 二叉树—二叉树的层序遍历Ⅱ
vector容器:push_back(),pop_back(),empty(),erase(),clear()队列queue:push(),pop(),front(),back(),empty(),size()栈stack:push(),pop(),top(),empty(),size()就是在上一个题的基础上将result最后翻转了一下,这样就可以实现自下而上的层序遍历。stack和queue,也就是栈和队列,是push;
2024-03-13 19:25:57
211
原创 代码随想录 二叉树—二叉树的层序遍历
用一个队列和一个二维的数组来辅助,先把根节点push到队列里,当队列不为空时,再用一个一维数组来辅助(之前定义的二维数组的元素),用来储存队列里的值,再把队列元素弹出,然后把左孩子右孩子加入到队列中,这里就相当于在第二层了,一次循环直到没有元素为止。
2024-03-13 18:59:37
160
原创 代码随想录 二叉树—二叉树的迭代遍历
中序遍历顺序 左中右,先用一个节点指向root头节点,用一个栈来辅助,如果栈不空或者这个节点不空就一直循环,当节点不空,就把节点指向的push到战力,然后指向左孩子,这是左操作;如果为空,就把栈中元素弹出,放到result里作为中操作;然后指向右孩子,这是右操作。前序遍历的顺序:中左右,用一个栈来辅助,先把根节点进栈,然后再来一个节点用来保存根节点,把根节点弹出栈放入result数组里,因为栈遵循先进后出,那么我们先把右孩子放进去,再把左孩子放进去,这样左孩子先弹出,再是右孩子,就是中左右的弹出顺序。
2024-03-12 23:09:35
182
原创 代码随想录 栈与队列—逆波兰表达式求值
逆波兰表达式相当于后缀表达式,遵循二叉树里的左右中顺序。用一个栈来辅助表达,就是遇到数字就把数字弹入栈,这里要注意弹入栈中的元素要把string类型改成int类型,这里要用到stoi()函数,是c++中将string转换成int类型所用到的函数;如果遇到操作符,就弹出两个数字进行操作符运算。最后用result来保存栈中的最后一个元素,也就是结果,然后返回。
2024-03-11 19:46:36
341
原创 代码随想录 栈与队列—删除字符串中的所有相邻重复项
玩过祖玛吧,一个道理。类比如上一题,也可以用一个栈来辅助,当栈为空或者不匹配时,就把字符串里遍历到的元素压进栈,匹配了就把栈中元素弹出,用result把最后栈中元素保存起来,再相反一下即可。
2024-03-11 19:08:33
282
原创 代码随想录 栈与队列—有效的括号
先给出一个栈,用循环遍历字符串s,如果扫描到左括号,就把相对应的右括号弹进栈,如果还没扫描完字符串s栈就空了或者是栈里的右括号和字符串里的右括号不匹配,就直接返回false,剩下的就是匹配上的情况,就直接弹出栈中的元素,相当于匹配上就消掉。最后扫描完如果栈为空,就是满足情况,直接返回栈空即可。
2024-03-11 18:36:17
640
原创 代码随想录 栈与队列—用队列实现栈
while(size--)里的操作是把q1里除了最后一个元素的所有元素移到q2里,只剩最后一个元素保存在result里返回,但在返回前要把q2里清空。push就直接push就可以。top和empty简单。
2024-03-10 22:58:16
427
原创 代码随想录 栈与队列—用栈实现队列
pop则需要在out栈为空时进行操作,把in栈的栈顶元素push到out里,再把out栈的元素pop出来,中间用result来存,最后返回result。设置两个栈,一个in栈一个out栈,如图。empty就是in和out都为空则返回。push直接push。
2024-03-07 15:21:17
500
原创 代码随想录 字符串—反转字符串的单词
str是一个元素为字符串类型的数组(理解版),选用循环消除多余的前中后的空格,放入ss中,再把ss放入str中,最后倒着输出str的各个元素即可。
2024-03-06 13:54:43
177
原创 代码随想录 字符串—反转字符串Ⅱ
很明显就是以2k为一组,那就以2k一组来循环。在循环里,先处理2k的前k个字符的反转,如果后一段大于k小于2k,也就是i+k<=字符串长度时(因为后一段如果小于k的话,i+k就会大于字符串长度),那就反转前一段。则两个处理都是一样的。然后继续循环,如果是括号里的情况,就把i开始到最后都反转。
2024-03-05 19:29:37
147
空空如也
四驱ubuntu小车远程连接时不显示喇叭设备,但接入屏幕可查询到喇叭设备,为什么?
2024-08-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人