leetcode总结
mm
多笑一笑啊
冥王星不见了
展开
-
树 做题总结(三)[429,525,116,117,104,111]层序遍历
429. N 叉树的层序遍历思路:层序遍历,对N叉树检测孩子时,不是直接调用左右了。直接判断有无子孩子,用extand函数追加列表,无需dui’hai注意:迭代和递归两种都要掌握代码:class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: if not root: return [] results = [] que = col原创 2021-12-18 22:23:17 · 521 阅读 · 0 评论 -
树 做题总结(二)[513,102,107,199,637] BFS
513. 找树左下角的值思路:广度优先搜索,按层遍历,记录每层第一个,最后一层的第一个即为答案。两个条件,最左侧(第一个)和最后一层。注意:迭代和递归两种都要掌握代码:class Solution: def findBottomLeftValue(self, root: Optional[TreeNode]) -> int: # 层序遍历迭代法 # if not root: # return原创 2021-12-16 22:29:12 · 1118 阅读 · 0 评论 -
树做题总结(一)[j34,94,1372] DFS
34. 二叉树中和为某一值的路径思路:采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。注意:在为叶子节点的前提下不断判断当前target是否等于路径和代码:class Solution: def pathSum(self, root: TreeNode, target: int) -> List[List[int]]: ret = [] path = []原创 2021-12-16 22:08:34 · 692 阅读 · 0 评论 -
链表做题总结(六)[234]
234. 回文链表思路:快指针走到末尾,慢指针刚好到中间。其中慢指针将前半部分反转。然后比较注意:如何在利用快慢指针找中点的同时反转链表,注意两者互不影响就可以实现代码:class Solution: def isPalindrome(self, head: ListNode) -> bool: # 边界判断 if not head or not head.next: return True #原创 2021-11-29 11:12:22 · 101 阅读 · 0 评论 -
链表做题总结(五)[148,206]
148. 排序链表思路:递归实现链表归并排序,具体步骤见代码注意:对于递归的理解还是不够透彻,可以将递归函数一直推算到极限,比如本题最终每个子链表分割到只有一个结点的时候,此时结合代码去思考。递归是一个套娃!递归到最小单位再思考怎么写代码,还要注意跳出递归的条件。在合并队列的时候,要秉承由小到大的原则,所以每循环一次只加一个节点,另一个节点还要继续参与比较。代码: # Definition for singly-linked list.# class ListNode:# def _原创 2021-11-26 23:20:33 · 378 阅读 · 0 评论 -
链表做题总结(四)[143]
138. 复制带随机指针的链表思路:芜湖!!!这是我第一次思路完全正确,并且代码八九不离十!!!并且还是中等题,开心!找中间节点+反转后半段+拼接注意:循环条件还是把握不准,什么时候用 while cur,while cur.next,while cur.next.next我的代码刚开始会超时,但是我还是不明白为什么,和官方差不多呀,只是因为它把每一步包装成函数了代码: def reorderList(self, head: ListNode) -> None: """原创 2021-11-24 22:12:07 · 208 阅读 · 0 评论 -
链表做题总结(三)[141,142,138]
138. 复制带随机指针的链表思路:采用哈希表进行两次遍历。第一次遍历将拷贝后链表的每个节点与原链表一一对应。第二遍遍历将哈希表中 value的next指针 指向cur的next节点在哈希表中对应的vaule注意:用get而不是map1[cur.next]。因为会到None代码:class Solution: def copyRandomList(self, head: 'Node') -> 'Node': if not head: return head原创 2021-11-22 22:14:55 · 488 阅读 · 0 评论 -
链表做题总结(二)[86,92]
86.分割链表思路:将链表先分后合,分为较大的和较小的,每遍历到一个节点,确定添到哪个列表后面,最后两个链表首位相接注意:创建两个伪头节点;别忘了最终的尾节点的next指针设为空代码:class Solution: def partition(self, head: ListNode, x: int) -> ListNode: if (head==None or head.next==None):return head dummypre = ListN原创 2021-11-21 22:04:31 · 689 阅读 · 0 评论 -
链表做题总结(一)[21,82,83]
21.合并两个有序列表思路:递归注意:判断边界情况代码:class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: if not l1: return l2 if not l2: return l1 if l1.val < l2.val: l1.next=se原创 2021-11-20 21:45:34 · 462 阅读 · 0 评论 -
链表专题(知识和技巧)
修改指针链表反转# 指针的修改class Solution: # 翻转一个子链表,并且返回新的头与尾 def reverse(self, head: ListNode, tail: ListNode, terminal:ListNode): cur=head.next pre=None while cur != terminal: ''' 注意这里,为什么是判断terminal,而不是ta原创 2021-11-20 19:52:14 · 311 阅读 · 0 评论