
LeetCode
.
矮油葛格嗨你好
这个作者很懒,什么都没留下…
展开
-
LeetCode#448找到所有数组中消失的数字 Python
题目地址:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/我的解答:class Solution: def findDisappearedNumbers(self, nums: List[int]) -> List[int]: if not nums: return [] n = len(nums) res = [] nums原创 2020-08-10 20:59:26 · 228 阅读 · 0 评论 -
LeetCode#226翻转二叉树 Python
题目地址:https://leetcode-cn.com/problems/invert-binary-tree/看了百十来题,我仍然是一看就会,一做就废的菜鸡(有时候看都看不懂# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonec原创 2020-07-30 09:12:51 · 249 阅读 · 0 评论 -
LeetCode#198打家劫舍 Python
题目地址:https://leetcode-cn.com/problems/house-robber/动态规划,即使这么简单我还是写不对注意:只要不进两个连续的房屋就不会报警,但是可以跨好几个房屋,只要它们屋里的现金相加结果最大dp[n]表示前n个房屋能偷到的最大现金,那dp[n + 1] 就等于 dp[n - 1] + 第n + 1这个房屋里的现金num,和dp[n]这两个数中的最大值,即:dp[n + 1] = max(dp[n], dp[n- 1] + num)class Solution:原创 2020-07-25 11:06:54 · 238 阅读 · 0 评论 -
LeetCode#160相交链表 Python
题目地址:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。解法1:# Definition for singly-linked list.# class ListNode:# def __init__(self, x)原创 2020-07-25 10:34:41 · 186 阅读 · 0 评论 -
LeetCode#40组合总和II Python
题目地址:https://leetcode-cn.com/problems/combination-sum-ii/class Solution: def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]: if not candidates: return [] n = len(candidates) candidates.sort()原创 2020-07-19 20:25:13 · 160 阅读 · 0 评论 -
LeetCode#39组合总和 Python
题目地址:https://leetcode-cn.com/problems/combination-sum/提示: 1 <= candidates.length <= 30 1 <= candidates[i] <= 200 candidate中的每个元素都是独一无二的。 1 <= target <= 500class Solution: def combinationSum(self, candidates: List[int], target: i原创 2020-07-19 19:38:23 · 210 阅读 · 1 评论 -
LeetCode#34在排序数组中查找元素的第一个和最后一个位置 Python
题目地址:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/labuladong二分法笔记之前看负雪明烛推荐过labuladong,我就找了他的算法小抄(是叫这名儿吧?)来看,也关注了公众号。觉得这篇写得很好,我读完之后的笔记如下:一般要求时间复杂度为O(logN)的题目就要考虑二分法。二分法主要是解决在有序数组中搜索一个值、搜索左边界/右边界的问题。1.搜索一个值的原创 2020-07-18 14:26:35 · 194 阅读 · 0 评论 -
LeetCode#141环形链表 Python
题目地址:https://leetcode-cn.com/problems/linked-list-cycle/时间复杂度和空间复杂度都是O(n):# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def hasCycle(self, head:原创 2020-07-16 09:27:50 · 169 阅读 · 0 评论 -
LeetCode#33搜索旋转排序数组 Python
题目地址:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/class Solution: def search(self, nums: List[int], target: int) -> int: if not nums: return -1 l, r = 0, len(nums) - 1 while l < r: mid = (原创 2020-07-16 08:39:16 · 121 阅读 · 0 评论 -
LeetCode#31下一个排列 Python
题目地址:LeetCode#31.下一个排列class Solution: def nextPermutation(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ if len(nums) < 2: return nums for i in range(len(nu原创 2020-07-14 21:06:19 · 174 阅读 · 0 评论 -
LeetCode#22括号生成 Python
我要什么时候才能达到那种看一个题就知道用什么方法、套什么模板的境界呢class Solution: def generateParenthesis(self, n: int) -> List[str]: #if n == 0: return [] res = [] path = "" self.dfs(res, n, n, path) return res def dfs(self, res, lef.原创 2020-07-13 09:34:04 · 177 阅读 · 0 评论 -
#LeetCode每日一题#的阶段回顾 ||
每日回顾六题—07-07—#69 有点儿问题#70可#83 还要再写#88 再写#94 ok#98 再做做午休原创 2020-07-11 15:14:17 · 184 阅读 · 0 评论 -
#LeetCode每日一题#的阶段回顾
从今天开始往后的几天,我打算对这一个半月以来做的题做一个回顾和总结。相信好些题目我已经忘记了!所以我的计划是:重新做一遍。查缺补漏,记录于此。#1可#2#3#4 hard#5#6思路有,写不出来#7#8考正则表达式#9 回文数#10 hard 略过#11 可今天上午学了个寂寞,真是伤心,我可真是菜到头了。。 —2020-06-28—...原创 2020-07-05 16:16:59 · 426 阅读 · 0 评论 -
LeetCode#113 路径总和II Python
我做不出来这就是#112的升级,但我就是不会转弯呀看别人题解,看半天算是懂了,尤其是tmp + [root.val]这个写法# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def pat.原创 2020-06-27 10:17:29 · 235 阅读 · 0 评论 -
LeetCode#112路径总和 Python
1、递归#class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def hasPathSum(self, root: TreeNode, sum: int) -> bool: if not root: return False sum -= root.val if not root.left and not ro.原创 2020-06-26 14:56:08 · 216 阅读 · 0 评论 -
LeetCode#111 二叉树的最小深度 Python
BFS比DFS合适,因为BFS遇到第一个叶子结点就可直接返回结果,而DFS要遍历整棵树我再写一遍递归和BFS:1、递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def minDep.原创 2020-06-25 13:36:05 · 255 阅读 · 0 评论 -
LeetCode#110 平衡二叉树 Python
这个题对我来说好绕啊,我懂思路但是递归真难理解。。。看题解看半天还是有点懵,我晕!# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isBalanced(self, root: Tr.原创 2020-06-24 09:46:21 · 230 阅读 · 0 评论 -
LeetCOde#109 有序链表转二叉搜索树 Python
一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。二叉搜索树:任一节点的值都大于其左子树的节点值,都小于其右子树的节点值。把链表转成数组,就和前一题一样辽:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None# Definition for a bin原创 2020-06-23 13:30:43 · 211 阅读 · 0 评论 -
LeetCode#108 将有序数组转换为二叉搜索树 Python
BFS,令中间位置右边元素(如果数组长度为偶数;数组长度为奇数则就是中间位置元素)作为根节点# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def sortedArrayToBST(self.原创 2020-06-23 08:58:55 · 187 阅读 · 1 评论 -
LeetCode#107 二叉树的层次遍历II Python
这就是#102变个形式输出# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrderBottom(self, root: TreeNode) -> List[List.原创 2020-06-23 08:21:06 · 182 阅读 · 0 评论 -
LeetCode#106 从中序与后序遍历构造二叉树 Python
和#105 一个解法:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def buildTree(self, inorder: List[int], postorder: List[int].原创 2020-06-22 13:04:14 · 188 阅读 · 1 评论 -
LeetCode#105 从前中/中后遍历序列构造二叉树 Python
前序的第一个节点就是根节点,再去中序里面找到根节点的索引,那根节点之前的部分就是左子树,根节点后部分就是右子树找索引用哈希表,降低时间复杂度# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: .原创 2020-06-22 09:53:07 · 181 阅读 · 0 评论 -
LeetCode#103 二叉树的锯齿形层次遍历 Python(#102的变形)
这个题目是#102变了个输出形式而已,巩固一下# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def zigzagLevelOrder(self, root: TreeNode) ->.原创 2020-06-20 14:48:53 · 174 阅读 · 0 评论 -
LeetCode#98 验证二叉搜索树 Python
我用的递归,以为没问题,结果提交之后没通过!仔细阅读才发现,题目我都没完全理解:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。比如:[10,5,15,null,null,6,20] 这个测试用例结果应该返回false,因为右子树中的左子节点6小于根节点10我好傻呀以下是看了题解之后再写的正解:1、递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x.原创 2020-06-20 14:30:09 · 229 阅读 · 0 评论 -
LeetCode#94二叉树的中序遍历 Python(总结二叉树的前中后序遍历(递归、迭代、标记法))
对题解区的各解法做一个总结:1、递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None#前序(根左右)class Solution: def inorderTraversal(self, root: TreeNode) .原创 2020-06-19 13:17:48 · 366 阅读 · 2 评论 -
LeetCode#102二叉树的层序遍历 Python
BFS:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: .原创 2020-06-19 08:33:37 · 167 阅读 · 0 评论 -
LeetCode#136 只出现一次的数字 Python
重点是你的算法应该具有线性时间复杂度。这类题用位运算,异或(相同为0,不同为1,满足交换律和结合律)1 ^ 1 = 00 ^ 0 = 01 ^ 0 = 1Class Solutions: def singleNumber(self, nums: List[int]) -> int: res = nums[0] for i in range(len(nums)): res ^= nums[i] return resget新知识...原创 2020-06-18 11:01:43 · 171 阅读 · 0 评论 -
LeetCode#104二叉树的最大深度 Python
递归(dfs):# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def maxDepth(self, root: TreeNode) -> int: if not ro.原创 2020-06-18 10:12:23 · 229 阅读 · 0 评论 -
LeetCode#101对称二叉树 Python
两种解法,递归(dfs)和队列(广度)递归,看了官方题解:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isSymmetric(self, root: TreeNode) -&g.原创 2020-06-18 08:53:28 · 228 阅读 · 0 评论 -
LeetCode#100相同的树 Python
这类题非常陌生,不过有好多个类似题可以用来反复练习,从这开始# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def isSameTree(self, p: TreeNode, q: Tree.原创 2020-06-17 12:11:58 · 142 阅读 · 0 评论 -
LeetCode#119杨辉三角II Python
进阶:你可以优化你的算法到 O(k) 空间复杂度吗?class Solution: def getRow(self, rowIndex: int) -> List[int]: if rowIndex == 0:return [1] L = [1] L1 = [0] + L L2 = L + [0] #temp = [] n = 0 while(n..原创 2020-06-17 11:51:23 · 218 阅读 · 0 评论 -
LeetCode#118杨辉三角 Python
这个题目,在廖雪峰的Python教程里我看到过,是生成器那一节,我记得当时我还写了点笔记,但是这次虽然做出来了可是不是用生成器,还花了好一会儿时间!class Solution: def generate(self, numRows: int) -> List[List[int]]: if numRows == 0:return [] res = [[1]] if numRows == 1:return res l = [0].原创 2020-06-17 08:45:45 · 291 阅读 · 0 评论 -
LeetCode#67二进制求和 Python解
Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。str = 'hello'print(str.zfill(10))#输出 00000helloclass Solution: def addBinary(self, a: str, b: str) -> str: n = max(len(a),len(b)) a = a.zfill(n) b = b.zfill(n) c = 0 #c.原创 2020-06-16 15:34:02 · 173 阅读 · 0 评论 -
LeetCode#70爬楼梯 Python解
递归、动态规划、斐波那契数列公式三种解递归容易超时、直接动态规划空间复杂度为O(n),优化一下可以为O(1):class Solution: def climbStairs(self, n: int) -> int: if n == 1:return 1 if n == 2:return 2 a,b,res = 1,2,0 for i in range(3,n+1): res = a+b .原创 2020-06-16 14:34:40 · 204 阅读 · 0 评论 -
LeetCode#69x的平方根 Python解
二分法:class Solution: def mySqrt(self, x: int) -> int: if x == 0:return 0 l,r = 0,x while(l<=r): mid = (l+r) // 2 if mid*mid == x: return mid elif mid*mid < x: .原创 2020-06-16 07:58:56 · 224 阅读 · 0 评论 -
LeetCOde#88合并两个有序数组 Python解
我思路是合并后排序,以下是我的解法,通过了但其实是不符合题目要求的,因为题目说了只能在nums1本身做修改class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ .原创 2020-06-13 12:13:13 · 244 阅读 · 0 评论 -
LeetCode#83 删除排序链表中的重复元素 Python解
这个题目似曾相识# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteDuplicates(self, head: ListNode) -> ListNode: dummy = ListNode(0) .原创 2020-06-12 14:58:06 · 130 阅读 · 0 评论 -
LeetCode#66加一 Python解
一开始我想的是直接操作,判断、加一或者进位加一,但我写着写着发现这样要处理好几种特殊情况太,譬如3999、99 有点麻烦。于是我换了种思路:把列表转成字符串再转成整型,加一之后再转成整型列表:class Solution: def plusOne(self, digits: List[int]) -> List[int]: s = ''.join(map(str,digits)) intd = int(s) + 1 return [int(.原创 2020-06-11 10:52:49 · 198 阅读 · 0 评论 -
LeetCode#58最后一个单词的长度 Python解
我的解:class Solution: def lengthOfLastWord(self, s: str) -> int: if not s:return 0 if ' ' not in s:return len(s) if s.replace(' ','') == '':return 0 s = s.rstrip(' ') res = 0 for i in s[::-1]: .原创 2020-06-11 10:14:29 · 212 阅读 · 0 评论 -
LeetCode#53最大子序和 Python解
动态规划class Solution: def maxSubArray(self, nums: List[int]) -> int: if not nums:return 0 if len(nums) == 1:return nums[0] max_sum = nums[0] for i in range(1,len(nums)): nums[i] = max(nums[i],nums[i]+nums.原创 2020-06-10 23:15:25 · 201 阅读 · 0 评论