Leetcode DFS
文章平均质量分 70
Leetcode DFS题目
努利!奋斗!
这个作者很懒,什么都没留下…
展开
-
Leetcode 366. Find Leaves of Binary Tree
leetcode 树原创 2022-06-29 11:55:58 · 171 阅读 · 0 评论 -
leetcode 2305. Fair Distribution of Cookies
leetcode原创 2022-06-23 12:50:14 · 562 阅读 · 0 评论 -
Leetcode 449. Serialize and Deserialize BST
题目解法按照特定顺序(比如前序遍历)进行serialize,也按照同样的方式进行deserialize,就能保证还原的顺序。class Codec: def serialize(self, root: Optional[TreeNode]) -> str: """Encodes a tree to a single string. """ if not root: return 'X' left原创 2022-03-07 13:27:43 · 188 阅读 · 0 评论 -
Leetcode 1786. Number of Restricted Paths From First to Last Node
题目解析题目意思首先理解一下。就是说第一个节点和最后一个节点是1和n固定,返回符合要求的restricted path个数。这个restricted含义是,在path中离最后一个节点也就是n越远的节点,距离也必须越大。这里需要注意的是除了开始节点和结束节点固定之外,并没有要求path中的节点本身的数字必须要有顺序,只需要离最后一个节点的距离保持满足条件即可。所以解题分为两步:通过最短路径算法找到每个节点离最后一个节点的最短距离,这里采用dijkstra找出符合条件的节点到最后节点距离降序的路径个原创 2022-02-16 10:57:11 · 207 阅读 · 0 评论 -
Leetcode 55. Jump Game
题目解法1:dfs+memorization (TLE)照例来讲这种解法应该是o(n)的但是不知道为啥会超时,莫非是我时间复杂度估计得不对?class Solution: def canJump(self, nums: List[int]) -> bool: def dfs(curr_pos,n): if curr_pos >= n: return False # check if w原创 2022-01-27 11:24:38 · 295 阅读 · 0 评论 -
Leetcode 1376. Time Needed to Inform All Employees (python+cpp)
题目解法1:BFSclass Solution: def numOfMinutes(self, n: int, headID: int, manager: List[int], informTime: List[int]) -> int: graph = collections.defaultdict(list) # s:subordinates,m:direct manager for s,m in enumerate(manager):原创 2020-12-27 07:06:30 · 1148 阅读 · 0 评论 -
Leetcode 329. Longest Increasing Path in a Matrix (python+cpp)
题目解法1:dfs暴力class Solution: def longestIncreasingPath(self, matrix: List[List[int]]) -> int: def dfs(i,j,prev): if i<0 or i>=m or j<0 or j>=n or matrix[i][j]<=prev: return 0 #print(i,j原创 2020-12-18 06:21:44 · 444 阅读 · 0 评论 -
Leetcode 1443. Minimum Time to Collect All Apples in a Tree (python)
题目解法1:利用dfs,找出所有的在摘苹果的过程中会被访问的边。这些被访问的边数*2就是答案这种做法需要保存当前路径,当发现当前路径包含苹果时,将这些边加入访问列表。这样做的坏处在于,每条边可能被加入多次,意味着时间复杂度的增加,事实证明这种做法确实不都快,刚刚过TLE的线。但利用字典或者set,还是可以不重复的记录摘苹果时需要被访问的边class Solution: def minTime(self, n: int, edges: List[List[int]], hasApple: L原创 2020-11-22 10:51:11 · 377 阅读 · 0 评论 -
Leetcode 1457. Pseudo-Palindromic Paths in a Binary Tree (python)
题目解法1:利用backtracking生成每条根节点到叶结点的路径,在利用字典注意判断。一条路径的permutaion要可以回文的条件是奇数个的数字个数只能是0或1class Solution: def pseudoPalindromicPaths (self, root: TreeNode) -> int: def dfs(node,path): if not node: return原创 2020-11-19 11:01:59 · 284 阅读 · 0 评论 -
Leetcode 1466. Reorder Routes to Make All Paths Lead to the City Zero (python)
题目解法:这道题目有个关键是,图里面n个节点,有n-1条边,而且题目也提示了可以看作是一棵树。关键在于理解每个节点都指向0代表什么:代表的是每个以0作为根节点,每个叶节点到根节点的路径都是子节点指向父节点的。比如第一个例子,只需要保证2到0和5到0这两条路径都是子节点指向父节点的。而对于connections里面的边,一定是有一个在树里是父节点,另一个是子节点,我们只需要保证这两个节点的相对顺序即可,那么解法就很清晰了:从0节点出发,利用BFS或者DFS遍历一遍树,并且保存每个节点被访问的相对顺序原创 2020-11-18 14:09:27 · 305 阅读 · 0 评论 -
Leetcode 1545. Find Kth Bit in Nth Binary String (python)
题目解法:递归class Solution: def findKthBit(self, n: int, k: int) -> str: # if n=1, meaning s='0' if n==1: return '0' # compute length of current string lenth = 2**n - 1 # if k at the middle原创 2020-11-02 06:38:57 · 188 阅读 · 0 评论 -
Leetcode 98. Validate Binary Search Tree (python)
Leetcode 98. Validate Binary Search Tree题目解法:题目解法:首先二叉搜索树的定义熟悉一下。对于一个节点,他可能出现这样的情况:是父节点的左节点,又是祖父节点的右子树中的节点 (意味着这个节点要比父节点小,但是要比祖父节点大)是父节点的右节点,又是祖父节点左子树中的节点 (意味着这个节点要比父节点大,但是要比祖父节点小)从上面的情况分析可以看出,对于一个节点,有一个上边界和下边界,而且这个边界会根据节点的深度变化不断更新。这就是解法的思路class原创 2020-10-15 09:59:45 · 306 阅读 · 0 评论 -
Leetcode Binary Tree Preorder, inorder, postorder Traversal (python)
Leetcode Binary Tree Preorder, inorder, postorder Traversal题目解析:题目https://leetcode.com/problems/binary-tree-preorder-traversal/https://leetcode.com/problems/binary-tree-inorder-traversal/submissions/https://leetcode.com/problems/binary-tree-postorder-t原创 2020-10-08 12:44:30 · 168 阅读 · 0 评论 -
Leetcode 1600. Throne Inheritance (python)
Leetcode 1600. Throne Inheritance题目解法:follow up题目题目太长了,直接放链接吧 https://leetcode.com/problems/throne-inheritance/解法:这道题目实际上是个树的preorder visit,然后储存的时候用字典的方式来保存父节点和子节点之间的关系一开始写的时候TLE了,先看看错误的写法:class ThroneInheritance: def __init__(self, kingName: st原创 2020-10-08 12:21:40 · 135 阅读 · 0 评论 -
Leetcode 1609. Even Odd Tree (python)
Leetcode 1609. Even Odd Tree题目解法1:BFS解法2:DFSfollow题目解法1:BFS本质上是个level order traversal再加一些判断即可,BFS版本的解法中需要额外的空间class Solution: def isEvenOddTree(self, root: TreeNode) -> bool: q = collections.deque() q.append(root) levels原创 2020-10-07 09:38:00 · 349 阅读 · 0 评论 -
Leetcode 394. Decode String (python)
Leetcode 394. Decode String题目解法1:recursion解法2:stack - one pass题目这道题应该跟basic calculator的题目合起来看,本质上是一样的解法1:recursion这里用了一个trick,函数返回值中包含一个index,这样就可以保证我们check到下一层递归处理到的位置class Solution: def decodeString(self, s: str) -> str: def decode(i原创 2020-10-02 04:08:11 · 553 阅读 · 1 评论 -
Leetcode 576. Out of Boundary Paths (python+cpp)
Leetcode 576. Out of Boundary Paths题目解法:暴力dfs(TLE)解法2:dfs+memorization题目解法:暴力dfs(TLE)这边要注意的是,不需要判断当前位置是否被访问过。因为问的是多少条不同的路径,只要开始位置不同,那么路径就不同dfs写法1:这种写法完全可以,但是如果想要加memorization就不方便了,所以写法2更好class Solution: def findPaths(self, m: int, n: int, N: int,原创 2020-09-23 08:00:02 · 209 阅读 · 0 评论 -
根据距离求cluster
题目:解法:解法与上面说的思路一样import mathimport collectionsdef cal_dis(x1,y1,x2,y2): return math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))k = 7points = [(0,1),(0,2),(0,3),(0,4),(0,10),(0,11),(0,100),(0,101)]graph = collections.defaultdict(set)for i in rang原创 2020-09-20 09:30:10 · 424 阅读 · 0 评论 -
Leetcode 684. Redundant Connection (python)
Leetcode 684. Redundant Connection题目解法1:dfs解法2:unionfind题目解法1:dfs一次构建图,返回第一组成环的边。class Solution: def findRedundantConnection(self, edges: List[List[int]]) -> List[int]: def dfs(source,target): if source in seen:原创 2020-09-06 11:41:25 · 441 阅读 · 0 评论 -
Leetcode 200. Number of Islands (python+cpp)
Leetcode 200. Number of Islands题目解法1:DFS解法2:union find题目解法1:DFS每次遇到1时进行dfs,并将访问到连在一起的1都进行mark。总共进行DFS的次数就是island的个数python代码:class Solution: def numIslands(self, grid: List[List[str]]) -> int: def helper(i,j): if i<0 or i原创 2020-09-05 04:53:25 · 662 阅读 · 0 评论 -
leetcode 236. Lowest Common Ancestor of a Binary Tree(python)
leetcode 236. Lowest Common Ancestor of a Binary Tree题目解法1:DFS解法2:BFS+字典参考题目Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.According to the definition of L...原创 2019-12-28 07:54:47 · 379 阅读 · 0 评论 -
leetcode 226. Invert Binary Tree (python)
leetcode 226. Invert Binary Tree题目解法1:利用递归(recursive)形式1形式2(跟简洁,直接用原函数进行递归)解法2:利用迭代(iterative)题目Invert a binary tree.(具体题目参考leetcode官网)解法1:利用递归(recursive)递归的将每个节点的左右节点调换形式1class Solution(object)...原创 2019-12-30 06:19:45 · 346 阅读 · 0 评论 -
leetcode 279. Perfect Squares (python)
leetcode 279. Perfect Squares题目解法1:DP解法2:BFS算法流程解法3:lagrange四平方和定理题目Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, …) which sum to n.Example ...原创 2019-12-30 11:51:29 · 1042 阅读 · 0 评论 -
Leetcode 617. Merge Two Binary Trees(python)
Leetcode 617. Merge Two Binary Trees题目解法1:DFS解法2:BFS题目解法1:DFS在recursion的每一步如果当前的两个节点都不为空,更新第一棵树的当前节点val为两个节点val的和如果其中有一个节点为空,则返回另一个节点当前节点的left和right节点为下一层recursion返回的结果class Solution(object)...原创 2020-01-20 03:32:57 · 274 阅读 · 0 评论 -
Leetcode 129. Sum Root to Leaf Numbers(python)
Leetcode 129. Sum Root to Leaf Numbers题目解法1:DFS直接计算解法2:DFS+list题目Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.An example is the root-to-leaf p...原创 2020-01-27 05:04:47 · 342 阅读 · 0 评论 -
Leetcode 257. Binary Tree Paths(python+cpp)
Leetcode 257. Binary Tree Paths题目解法 1:DFS题目Given a binary tree, return all root-to-leaf paths.Note: A leaf is a node with no children.解法 1:DFS原创 2020-02-01 11:12:56 · 247 阅读 · 0 评论 -
Leetcode 323. Number of Connected Components in an Undirected Graph(python+cpp)
Leetcode 323. Number of Connected Components in an Undirected Graph题目解法1:DFS解法2:unionfind题目Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write ...原创 2020-02-18 11:52:58 · 1638 阅读 · 0 评论 -
Leetcode 130. Surrounded Regions(python+cpp)
Leetcode 130. Surrounded Regions题目解析题目解析这道题目的关键在于反向思路。如果要去判断某个O所在的位置是不是被包围,挺困难的,所以反向去找那些没有被包围的所有O的位置,而题目里明确说了,在四条boundary上的O是不被包围的。这应该是最straight forward的方法了,不过从提交结果来看速度还是比较慢。具体流程如下:从四条边界上找所有O的位置,这些O是最简单的可以确认是不被包围的点。那么进一步的就可以知道和这些O直接相连的点也肯定是不被包围的从这些点原创 2020-05-11 11:24:08 · 401 阅读 · 0 评论 -
Leetcode 417. Pacific Atlantic Water Flow(python+cpp)
Leetcode 417. Pacific Atlantic Water Flow题目解析题目解析这道题肯定第一时间想到的是dfs。但是这边如果遍历数组的每个位置进行dfs的话,复杂度太高了,这样做理论上时间复杂度会是O((MN)(M*N))。所以可以采用一种逆向的思路。从靠近大洋的四条边开始反向搜索,反向搜索的过程中把能够到的位置进行标记。如果某个位置两个大洋同时都能到,那么这个位置满...原创 2020-04-24 11:18:09 · 387 阅读 · 0 评论 -
Leetcode 547. Friend Circles(python+cpp)
Leetcode 547. Friend Circles题目解析DFS解法BFS解法C++版本DFS题目解析这道题目给的是一个邻接矩阵。乍一看会觉得跟695 max area of islands是一模一样的,其实不然。695的矩阵展示的是每个1和0的实际位置,而这题则不是。应该说695的矩阵表示某种意义上说已经是无向图的一种表示了,但是这道题目不是。具体的区别是这样的,这题的核心目标是...原创 2020-04-23 01:32:49 · 382 阅读 · 0 评论 -
Leetcode 695. Max Area of Island (python+cpp)
Leetcode 695. Max Area of Island题目解法1:BFS解法2:DFSC++版本DFS题目解法1:BFS这道题dfs和bfs当然写起来都差不多,不过bfs更直观一点,而且对于这道题来讲bfs更快。有一点值得说一下,这边bfs和dfs统一不需要设置seen矩阵来保存。在访问到1的元素是直接修改让他变成0以此来标记即可python代码如下:class Sol...原创 2020-04-21 07:44:47 · 246 阅读 · 0 评论