
leetcode_python
leileii
这个作者很懒,什么都没留下…
展开
-
leetcode刷题python之105. 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct...原创 2020-02-01 00:55:19 · 371 阅读 · 0 评论 -
leetcode刷题python之104.二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-dept...原创 2020-02-01 00:54:42 · 193 阅读 · 0 评论 -
leetcode刷题python之103.二叉树的锯齿形层次遍历
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr...原创 2020-02-01 00:53:45 · 335 阅读 · 0 评论 -
leetcode刷题python之二叉树的层次遍历
题目:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tr...原创 2020-01-31 21:42:13 · 448 阅读 · 0 评论 -
leetcode刷题python之101.对称二叉树
题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3# Definition for a binary tree node.# class TreeNode:...原创 2020-01-31 21:40:45 · 162 阅读 · 0 评论 -
leetcode刷题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(se...原创 2019-11-17 23:40:08 · 140 阅读 · 0 评论 -
leetcode刷题python之恢复二叉搜索树
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def recoverTree(s...原创 2019-11-17 23:24:44 · 171 阅读 · 0 评论 -
leetcode刷题python之验证二叉搜索树
class Solution: def isValidBST(self, root: TreeNode) -> bool: res = [] def helper(root): if not root: return helper(root.left) ...原创 2019-11-17 21:40:16 · 254 阅读 · 0 评论 -
leetcode刷题python之交错字符串
class Solution: def isInterleave(self, s1: str, s2: str, s3: str) -> bool: if (len(s3) != len(s1) + len(s2)): return False # 不加这个通过为6/101,里面由95个长度不行的??? dp = [[False] * (len(s2...原创 2019-11-17 21:23:34 · 212 阅读 · 0 评论 -
leetcode刷题python之不同的二叉搜索树
思路:这个题与上一个不同,只需要得到次数。使用动态规划可以避免一次次的计算。n对应的次数与1~n-1都有关。ps:二叉搜索树的顺序为根→左→右题目:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5class Solution: def numTrees(self, n: int) -> int: G = [0...原创 2019-11-17 17:20:19 · 164 阅读 · 0 评论 -
leetcode刷题python之不同的二叉搜索树II
思路:二叉树的知识。return [None, ]表示字数为空,每次都返回一个子树的列表,其中子树是由左子树和右子树整合得到的。题目:给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。示例:输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]# Def...原创 2019-11-17 17:15:56 · 150 阅读 · 0 评论 -
leetcode刷题python之二叉树的中序遍历
要开始二叉树了啊。。。思路:遍历的时候必然是从根节点开始遍历,那么遍历了根节点之后,将根节点的右侧先入栈,再是跟节点,再是左侧;这样pop的话就是按照左→根→右的顺序进行pop。white和gray用来判断点是否被遍历过,如果遍历过,点的颜色是灰色,没有则为白,pop的时候会看颜色,即是否被遍历过,如果没有被遍历,则去看其下面有没有子节点。题目:给定一个二叉树,返回它的中序 遍历。示例:输...原创 2019-11-16 00:52:43 · 255 阅读 · 0 评论 -
leetcode刷题python之复原ip地址
思路:回溯算法还是没有完全掌握啊。。。通过回溯来使字符串分为4部分,并且长度为n。需要注意的地方在代码里题目:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]class Solution: def restoreIpAddresses(sel...原创 2019-11-15 23:52:44 · 504 阅读 · 0 评论 -
leetcode刷题python之反转链表II
思路:对链表的运行机制有了了解之后就会好计算很多,需要注意的使操作链表之前往往需要对当前的链表进行备份。先使链表移动到n之前的位置,保存为begin;对n的位置进行保存为left;再使链表向后移动至m后的位置,并将其保存为tail;再对中间的部分进行反转,反转之后通过之前保存的坐标点将链表连接起来;注意,被反转的n对应的位置应该next置空,如果不置空的话会形成死循环。题目:反转从位置 m 到 ...原创 2019-11-15 14:42:37 · 136 阅读 · 0 评论 -
leetcode刷题python之解码方法
题目:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。思路:使用动态规划,当前位置的可能性dp[i]取决于dp[i-1]和dp[i-2],有点类似爬楼梯。...原创 2019-11-15 10:56:29 · 255 阅读 · 0 评论 -
leetcode刷题python之格雷编码
题目:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2思路:这个题取决于格雷码的结构,非常巧妙,格雷码的上下两部分,除去开头的第一位,其余部分是对称的,所以想要得到...原创 2019-11-13 23:45:46 · 290 阅读 · 0 评论 -
leetcode刷题python之合并两个有序数组
题目:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = ...原创 2019-11-12 22:01:55 · 412 阅读 · 0 评论 -
leetcode刷题python之扰乱字符串
题目:给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。下图是字符串 s1 = “great” 的一种可能的表示形式。在扰乱这个字符串的过程中,我们可以挑选任何一个非叶节点,然后交换它的两个子节点。例如,如果我们挑选非叶节点 “gr” ,交换它的两个子节点,将会产生扰乱字符串 “rgeat” 。我们将 "rgeat” 称作 “great” 的一个扰乱字符串。同...原创 2019-11-12 21:34:11 · 222 阅读 · 0 评论 -
leetcode刷题python之分割链表
题目:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5思路:将小于x的值放到左侧,大于等于x的值放到右侧链表,再把两个...原创 2019-11-12 20:48:26 · 314 阅读 · 0 评论 -
leetcode刷题python之柱状图中最大的矩形
题目:给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出: 6思路:终于理解这个使用栈的思路啦,其实栈里存储的是宽度不确定的高,当我们把一个高压入栈...原创 2019-11-11 23:17:11 · 237 阅读 · 0 评论 -
leetcode刷题python之柱状图中最大的矩形
题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10思路:这道题使用了栈,但是还是好难啊。。。...原创 2019-11-08 21:30:01 · 267 阅读 · 0 评论 -
leetcode刷题python之删除排序链表中的重复元素II
题目:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5思路:这个题与I相比,是要把重复元素都删除掉,这样如果直接删除重复值与参考值,对于重复出现的第三个则无法判断。为了这个问题引入一个新的参考链表,用这个链表判断连续的位置到底会...原创 2019-11-08 16:50:32 · 249 阅读 · 0 评论 -
leetcode刷题python之删除排序链表中的重复操作
题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2思路:链表地操作就是,先搞定设置一个代表链表地指针A,再设置另一指针B去修改链表,指针B的修改会改变原链表,最后返回指针A就ok。 left_Node.next = left_Node.next.next会修改链表;left_Node = left_Node...原创 2019-11-07 23:23:48 · 140 阅读 · 0 评论 -
leetcode刷题python之搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true思路:还是用二分法来解决。先判断mid是否对应...原创 2019-11-07 23:09:54 · 176 阅读 · 0 评论 -
leetcode刷题python之删除排序数组中的重复项
题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面...原创 2019-11-07 20:46:40 · 129 阅读 · 0 评论 -
leetcode刷题python之单词搜索
题目:给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 t...原创 2019-11-06 23:12:25 · 365 阅读 · 0 评论 -
leetcode刷题python之组合
思路:使用了回溯算法,循环中的嵌套太多,不能直接写出来,使用回溯,进行循环的迭代。class Solution: def combine(self, n: int, k: int) -> List[List[int]]: res = [] def backtrack(i, k , temp): if k == 0: ...原创 2019-11-06 21:51:57 · 116 阅读 · 0 评论 -
leetcode刷题python之长度最小的子数组
字符串操作,使用了双指针算法,但是感觉很费时间啊。。难道是我自己也有写的不好的地方?class Solution: def minSubArrayLen(self, s: int, nums: List[int]) -> int: # if not nums: return 0 left = 0 right = 0 m...原创 2019-11-05 23:10:33 · 239 阅读 · 0 评论 -
leetcode刷题python之最小覆盖子串
题目:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”学到了(之前没记住又遇到了)新函数:Counter()可以直接把字符串变成字符(别的也行)的结合;all()判断列表有没有空字符串或者0,有则返回False,无则Truemap()以一个列表为基...原创 2019-11-05 22:15:56 · 327 阅读 · 0 评论 -
leetcode刷题python之颜色分类
思路:按步修改,不能直接给列表赋值(不知道为啥就是不成功)循环判断值是否为0,1,2为0,cur++,left++,此结果符合最终要求为1,cur++,left不变,因为还不确定后面有没有0来放到这个位置。如果left++了,代表这个位置也为0,但是这个位置为1,所以不能left++为2,交换cur与right的值,right–,cur和left不变。left不变是因为我们不知道交换过来的...原创 2019-11-05 17:25:35 · 272 阅读 · 0 评论 -
leetcode刷题python之搜索二维矩阵
思路:二分法查找,得记一个二分法的套路啊:while left<=right:相等:返回mid小于目标值:left = mid + 1mid大于目标值:right = mid - 1class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: ...原创 2019-11-05 00:55:17 · 237 阅读 · 0 评论 -
leetcode刷题python之矩阵置零
题目:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。思路:将第一行和第一列作为横纵坐标,进行遍历,当有值为0时,横纵坐标为零,此遍历不能包含第一行和第一列(单独判断);进行第二次遍历,判断当前的横纵坐标,如果横纵坐标有一个为零,则将将该值置零。原地算法即限制了空间复杂度应为o(1),所以不能新建矩阵,是指声明了第一列是否置零的布尔值,使...原创 2019-11-04 16:05:06 · 571 阅读 · 0 评论 -
leetcode刷题python之编辑距离
思路:使用动态规划,dp[i][j]表示,将word1[:j]变成word2[:i]需要的步骤数。如果word1[j - 1] == word2[i - 1],表示有相同字符出现,只需要进行这个字符前面的匹配就可以dp[i][j] = dp[i - 1][j - 1]。如果word1[j - 1] != word2[i - 1],则在步数最少的前一次基础上进行加一,即dp[i][j] = min(...原创 2019-11-04 12:04:06 · 157 阅读 · 0 评论 -
leetcode刷题python之简化路径
思路:使用栈思想,向用path.split(’/’)将字符串划分为 包含空字符 的列表,再判断列表中的字符,如果是…则pop,不为…或.且不为空,则append。class Solution: def simplifyPath(self, path: str) -> str: stack = [] path = path.split('/') ...原创 2019-10-31 17:18:55 · 297 阅读 · 0 评论 -
leetcode刷题python之爬楼梯
这个题符合斐波那契数列使用了斐波那契公式,直接求更快更节省空间思路来源:https://leetcode-cn.com/problems/climbing-stairs/solution/pa-lou-ti-by-leetcode/class Solution: def climbStairs(self, n: int) -> int: sqrt5 = 5 **...原创 2019-10-31 11:21:36 · 181 阅读 · 0 评论 -
leetcode刷题python之x的平方根
思路:使用二分查找,注意使用mid为右中位数,更新right的时候使用right = mid - 1class Solution: def mySqrt(self, x: int) -> int: left = 0 right = x // 2 + 1 while left < right: #选取mid...原创 2019-10-30 22:53:08 · 216 阅读 · 0 评论 -
leetcode刷题python之文本左右对齐
思路:先写小函数来确定一行中需要放几个单词(通过返回单词列表的开头和结尾),再确定空格的添加方法。class Solution: def fullJustify(self, words: List[str], maxWidth: int) -> List[str]: i = 0 n = len(words) res = [] ...原创 2019-10-30 13:55:04 · 390 阅读 · 0 评论 -
leetcode刷题python之二进制求和
思路:先补齐,再相加,有进位则flag变为1class Solution: def addBinary(self, a: str, b: str) -> str: if len(a) < len(b): a, b = b, a b = "0" * (len(a) - len(b)) + b a = li...原创 2019-10-29 21:15:59 · 107 阅读 · 0 评论 -
leetcode刷题python之加一
思路:加一是需要考虑进位,所以先设置了每一位的进位flag列表,为‘9’则进位,不为9则加一后直接输出class Solution: def plusOne(self, digits: List[int]) -> List[int]: n = len(digits) flag = [0]*(n - 1) for i in range(...原创 2019-10-28 23:29:11 · 175 阅读 · 0 评论 -
leetcode刷题python之最小路径和
class Solution: def minPathSum(self, grid: List[List[int]]) -> int: n = len(grid) m = len(grid[0]) for i in range(1, m): grid[0][i] += grid[0][i - 1] ...原创 2019-10-28 17:30:58 · 276 阅读 · 0 评论