leetcode深度优先搜索
文章平均质量分 65
岗岗ganggang
这个作者很懒,什么都没留下…
展开
-
leetcode51. N 皇后python
题目描述:思路:1.n皇后问题,要求任意两个皇后不能处在一行,一列,一条斜线上。2.n皇后问题一个有效的解,必定是每一行放置一个皇后,只有这样才满足不冲突的最基本要求,因此此题可以转换为从第一行开始,从可选的n个列中选择一个合适的位置放置当前的皇后,然后再到下一行,为下一个皇后选择放置位置。3.为了确定一个新位置可不可以放置Q,需要记录当前已经确定的Q的位置。回溯过程:题解:参考LeetCode-51.N皇后,Python的回溯法实现及详细讲解_甘如荠-.原创 2021-11-11 16:40:43 · 458 阅读 · 0 评论 -
leetcode22. 括号生成
题目描述:题解:参考https://segmentfault.com/a/11900000221100821.设计一个递归函数helper(left,right,mystr,res) left表示剩余左括号数量,right表示剩余右括号数量,mystr表示当前找到的一种组合方式,res保存所有可能结果 left right均为0时说明找到了一种组合,mystr加入res中 left>0,mystr中添加一个左括号,传入新的left值和新的mystr进行递归 ...原创 2021-05-26 11:13:31 · 55 阅读 · 0 评论 -
leetcode 784. 字母大小写全排列 python
题目描述:题解:回溯DFS思路其实很简单1.result保存最终结果,currs记录当前路径上得到的字符串,idx表示当前匹配到s的位置。2.从输入s的第一个字符开始,如果当前对应字符是字母,则可以按照大小写两种情况拼街到currs中,否则直接把s[idx]加入即可。3.因为采用字符串拼接的方式,不需要回溯的过程。以a1b2为例:class Solution(object): def letterCasePermutation(self, s):原创 2021-11-10 19:01:56 · 438 阅读 · 0 评论 -
leetcode17. 电话号码的字母组合
题目描述:题解:1.用map digtostr保存每个数字对应的字符2.输入digits中有diglen个数字,result保存组合结果初始化为空3.对digits中每个数字找到对应字符,当处理第一个数字时,将数字对应字符保存在result,处理后续数字时,将字符保存在str_list4.将result中每个元素与str_list组合保存在tmp中,并对result更新5.算法主要思想是随着数字的读取不断更新resultdef letterCombinations(se原创 2021-05-25 10:47:53 · 118 阅读 · 0 评论 -
leetcode 79. 单词搜索 python
题目描述:题解:回溯参考LeetCode 79 Word Search (Python) - 小明MaxMing1.定义函数dfs,输入为一个坐标(posx,posy),需要匹配的字符串s和当前已经匹配到的下标idx,如果idx=len(s)说明已经完成了匹配,返回true,如果(posx,posy)超出界限或者与下一个需要匹配的s中的字符不同则返回,否则对当前位置的上下左右四个相邻位置调用dfs。2.对输入board的每个位置进行搜索,如果找到一个位置与s第一个字符相等则...原创 2021-11-08 17:23:08 · 551 阅读 · 1 评论 -
leetcode 130. 被围绕的区域 python
题目描述:题解:这道题是学习回溯算法的时候刷到的,但其实感觉还是DFS的方法解决。题目要求将所有被X包围的O改为O,被包围的部分不会属于边界,所以也就是将除了边界处O或与边界处O相连的部分外(相连的定义是上下左右四个方向),全部的O改为X。1.定义一个DFS函数,输入为一个坐标(x,y),如果该位置对应的是O则将其标记为M,然后对其上下左右四个位置调用DFS。2.对输入board的四个边界的每个位置调用DFS函数。3.此时已经将所有不需要更改的O标志为了M,然后再对boa..原创 2021-11-07 12:36:33 · 373 阅读 · 0 评论 -
leetcode 200. 岛屿数量python
题目描述:题解:DFS是在学习回溯算法的时候遇到的这道题,但其实就是DFS的思想。本来想通过在回溯的过程中,根据每个节点的周围节点为0和1的数量,判断该节点属于一个之前搜索过的大岛屿还是属于一个新的岛屿,但是好像不太可行。基本思路:对输入的grid依次进行搜索,如果遇到一个grid[i][j]=='1',说明该位置对应一个岛屿或者处在一个大岛屿中,岛屿数量加一,对该位置上下左右四个位置进行DFS,将为1的节点全都设为0,避免重复计算。class Solution(obj..原创 2021-11-05 16:27:10 · 189 阅读 · 0 评论 -
leetcode 542. 01 矩阵 python
题目描述:题解(BFS):题解一:1.创建一个队列myq,初始化为空,创建一个和mat结构相同的newmat作为返回值,初始化为一个很大的值,之后进行更新。另一个和mat结构相同的visited记录当前位置是否已经被处理,初始化为全0,表示未被处理。2.将mat中值为0的位置(i,j)对应的newmat值设为0,visited设为1,表示已经处理过,然后将(i,j)加入队列myq。3.取出myq中第一个节点(posx,posy),对该位置上下左右四个相邻位置的newmat进行更.原创 2021-10-11 16:34:11 · 187 阅读 · 0 评论 -
leetcode 116. 填充每个节点的下一个右侧节点指针python
题目描述:题解:1.如果root为空则直接返回,如果root.left为空,则表示当前已经到叶子结点,也直接返回。2.root左子节点的next为root的右子节点,root右子节点的next为root的next节点的左子节点。3.对root左右子树递归调用。class Solution(object): def connect(self, root): if root is None or root.left is None: .原创 2021-10-09 21:08:54 · 90 阅读 · 0 评论 -
leetcode 617. 合并二叉树 python
题目描述:题解:1.如果当前位置两个二叉树的节点都非空,则将root1.val更新为root1.val和root2.val之和。2.如果当前位置只存在root1或root2,则直接返回即可。3.然后在对左右子树递归调用。class Solution(object): def connect(self, root): if root is None or root.left is None: return None r.原创 2021-10-09 21:02:30 · 215 阅读 · 0 评论 -
leetcode 695. 岛屿的最大面积 python
题目描述:输入的grid是一个数组,其中0代表海洋,1代表岛屿,题目要求寻找最大岛屿面积,即寻找grid中连续1的最大值。题解:采用深度优先搜索dfs的方法:1.对位置[i,j],如果i j超出边界,则结束搜索返回0,如果grid[i][j]存在,但为0,也结束搜索,返回0.2.如果[i,j]位置合法,并且grid[i][j]=1,则说明该位置代表一个岛屿或者处在一个更大岛屿之中,记录该岛屿面积count=1,然后需要对[i,j]周围的四个方向进行搜索,最终岛屿的面积为...原创 2021-10-09 17:08:45 · 1290 阅读 · 1 评论