
DFS
文章平均质量分 64
谢蟹蟹猴啊
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 13. 机器人的运动范围
思路: 矩阵搜索问题,如果符合条件就加入队列进行扩张!!!这样子的。class Solution { // 计算 x 的数位之和 int get(int x) { int res=0; for (; x; x /= 10) { res += x % 10; } return res; }public: int movingCount(int m, int n, int k) {.原创 2021-07-29 09:48:59 · 77 阅读 · 0 评论 -
200岛屿数量,网格式bfs或者dfs搜索题目
题目: 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。思路: 这道题一看就是搜索的题目,我想到了深度优先搜索,然后搜索方向有4个,每次搜索时候判断先当前搜索的行或者列有没有超过范围,每次不就是行+ -或者列+ -么,判断是不是越界,越界就不搜索了,然后还要看是不是1,是1才搜搜完进去的时候把网络变成0走过了。 然后我们遍原创 2021-07-06 21:52:40 · 65 阅读 · 0 评论 -
Leetcode: 494. 目标和 --很简单的dfs问题
题目: 给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。思路: 这是一道典型的深度优先搜索题目,每层2个选择,层数就是数组的长度。时间复杂度是o(2^n),,遍历这棵树到叶节点原创 2021-06-07 09:56:52 · 144 阅读 · 0 评论 -
Leetcode47: 全排列II(全排列1的升级版!***)
题目:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。思路: 题目要求很简练,相比之前的全排列问题,这个题目的难点在于nums包含重复数字序列。我们如何避免重复数字造成的重复解呢! 首先我们可以明确这道题采用dfs深度优先搜索的策略,我们构造一个搜索树,如何避免同一个元素被重复使用呢?这一点可以看全排列I的j解答: 下面的代码中使用了:vector<int>::iterator it = find(track.begin(), track.end(原创 2021-05-31 21:49:00 · 86 阅读 · 0 评论 -
Leetcode993:二叉树的堂兄弟节点
Leetcode993:二叉树的堂兄弟节点题目描述: 1.二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 2.如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。 3.我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。 思路: 昨天夜里12点还没睡,就打开Leetcode瞄了一眼今天的题目,乍一原创 2021-05-17 10:12:21 · 251 阅读 · 0 评论 -
Lecode110:平衡二叉树
Lecode110:平衡二叉树方法1:自底向上递归方法2:自顶向下递归方法1:自底向上递归思路: dfs问题涉及的类型包括是返回所有路径,但是可能有限定条件;或者是对每个结点遍历判断赋值并返回。dfs多用return,bfs多用continue。这道题目属于第二种方法,但是这里又涉及到返限定条件:左右子树的高度绝对值不超过1。 这意味着我们需要在程序中对每个结点进行判断高度,那就涉及到对每个节点要返回高度记录值,但是该程序最终需要返回是非的结果,所以第一想法是不能直接对原函数做递归,而是通过一原创 2021-05-15 16:49:01 · 107 阅读 · 0 评论 -
Leetcode17:电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解题思路: 这道题目需要穷举所有的组合,属于典型的bfs问题,且搜索路径过程中没有阻碍项,所以只需要把搜索树构建完成找出所有完整的路径返回即可。 在上面的示例中,树的深度是输入字符的长度,每一层树的宽度是对应输入字符在原创 2021-05-14 16:24:11 · 562 阅读 · 0 评论 -
Leetcode112:路经总和(dfs/bfs)
Leetcode112:路经总和1.深度优先(dfs)/递归2.广度优先(dfs)/递归1.深度优先(dfs)/递归->一道比较简单的题目,一看就知道可以使用递归的方式解决。 以往的dfs是返回所有路径,这题只需要判断是否存在一条路符合条件,因此简化了问题。注意到递归问题所有的结果都 return 自最底部的判断,因此在这里bfs或者递归形式上可以理解为对每个树节点赋值 true 或者 false; 当递归到最底部左侧某条路,如果这条路符合条件 返回 true,表示对这个节点的肯定。 他的右边条件已原创 2021-05-13 21:37:32 · 166 阅读 · 0 评论 -
路径总和II:返回所有可行路径
路径总和II:返回所有可行路径这个题目和之前发的博客 路径总和I 类似,之前的题目返回是或者非,一般只需要对原函数做递归,这种返回所有可行的路径就是比较经典的bfs问题,一般需要建立子函数。和穷举所有解稍微有点不同,这边增加了限制条件,即从根节点到叶子节点的路经综合要等于目标值,那其实就是在简单bfs的基础上增加一个判断,符合条件加入返回数组,不符合条件就不管了,但是还是要遍历到的。 下面贴两种写法,大同小异:class Solution {public: vector<vecto原创 2021-05-14 11:34:14 · 147 阅读 · 0 评论