LeetCode题解(DFS)
yaoayao470
这个作者很懒,什么都没留下…
展开
-
DFS(深度优先遍历)解题思路
DFS主要可以用于解决三种问题 1.可达性/连通性问题 LeetCode上适用题目: 695 查找最大的连通面积 200 矩阵中的连通分量数目 547 好友关系的连通分量数目 130 填充封闭区域 417 能到达的太平洋和大西洋的区域 2.排列问题 LeetCode上适用题目: 17 数字键盘组合 93 IP 地址划分 79 在矩阵中寻找字符串 257 输出二叉树中所有从根到叶子的路径 47 含有...原创 2018-12-18 14:38:50 · 1637 阅读 · 0 评论 -
用DFS(深度优先遍历)解决可达性/连通性问题
解题思路:从一个节点出发,使用 DFS 对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,每趟从初始节点开始,需要把可以到达的位置做标记,并且标记后不需要更改,当走不通时返回,再寻找下一个节点进行遍历。 LeetCode上典型题目应用: 695 查找最大的连通面积 200 矩阵中的连通分量数目 695 查找最大的连通面积 [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0...原创 2018-12-18 14:51:50 · 1522 阅读 · 0 评论 -
用DFS(广度优先遍历)解决排列问题
例如有 { ‘a’,‘b’,‘c’ } 三个字符,求解所有由这三个字符排列得到的字符串。 解题思路: 一次排列中已经遍历过的元素不能重复遍历,因此需要对添加过的元素进行标记,避免本次排列出现重复。 这种问题在一次排列求解完成之后还需要继续求解,在本次排列结束后,为了保证已经访问过但是不在当前递归链中的元素可以继续被访问,需要对这个元素取消标记,同时移出子集。 LeetCode经典应用题目: 4...原创 2018-12-18 15:11:24 · 449 阅读 · 0 评论 -
用DFS(广度优先遍历)解决组合问题
从元素集中选取几个元素构成子集,求解可以构成子集的数目,与排列的主要区别是子集中元素顺序不同视为同一个子集 解题思路: 解题时要注意进行剪枝处理,与排列问题解法的区别是对每次迭代要重新设置起始值,避免出现添加了之前的元素造成顺序不同的同一个子集被添加到答案中的情况。 如果没有重复元素,不需要用数组对访问过的元素进行标记,因为剪枝过程可以避免访问到之前的添加过的元素。 如果有重复元素,需要对原始数...原创 2018-12-18 15:26:13 · 589 阅读 · 0 评论