
LeetCode题目记录
这里储存共享我写的LeetCode代码,我使用Python3进行编写
Jiale685
幸福并不是男子汉所该追求的
展开
-
【LeetCode】136. Single Number 解题报告(Python)
题目大意:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。解题思路:第一次知道异或找到这个元素时还很兴奋,现在已经是老生常谈了,两个相同的元素异或后变成0,根据这个得到代码提交代码:(Runtime: 44 ms, faster than 84.55 % )class Solution: def singleNumber(self, nums: 'List[int]') -> int: res = nums[0]原创 2020-11-21 17:53:12 · 270 阅读 · 0 评论 -
【LeetCode】101. Symmetric Tree 解题报告(Python)
题目分析:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:解题思路:这一题的本质还是遍历,对于树的遍历可使用递归或者栈。提交代码1:(递归,Runtime: 40 ms, faster than 99.14% )class Solution: def...原创 2019-04-26 16:31:13 · 542 阅读 · 0 评论 -
【LeetCode】100. Same Tree 解题报告(Python)
题目分析:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:输出: true示例 2:输入:输出: false解题思路:这一题的本质还是遍历,我用的递归遍历去判断是否相同,我想栈应该也能解决,但是本题递归效率还是很高的,所以用递归解决问题。提交代码:(递归,Runtime: 36 ms, fas...原创 2019-04-25 16:18:57 · 379 阅读 · 0 评论 -
【LeetCode】99. Recover Binary Search Tree 解题报告(Python)
题目分析:二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:解题思路:第一种:中序遍历将数值取出来,然后排序,然后再插入进入,使用的空间复杂度是O(n),见提交代码1。第二种:使用指针找到变动的那两个值,空间复杂度为常量见提交代码2.设置n1,n2的值用于寻找那两个点,self.n1 = TreeNode(None); self.n2 = Tree...原创 2019-04-25 16:18:36 · 396 阅读 · 0 评论 -
【LeetCode】98. Validate Binary Search Tree 解题报告(Python)
题目分析:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输出: true示例 2:解题思路:初看这一题是懵逼的,经过评论区的提醒发现核心就四个字:中序遍历,对于一个搜索树中序遍历为升序,这样我们就可以把问题转化为...原创 2019-04-23 22:57:45 · 327 阅读 · 0 评论 -
【LeetCode】97. Interleaving String 解题报告(Python)
题目分析:给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”输出: true示例 2:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”输出: false解题思路:当你遇到字符串且让你求...原创 2019-04-20 21:51:16 · 577 阅读 · 0 评论 -
【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)
题目分析:给定一个整数 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]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:解题思路:这一题可以用递归或递归+动态规划解,我们先说递归帮助理解,这一...原创 2019-04-19 22:22:37 · 471 阅读 · 0 评论 -
【LeetCode】96. Unique Binary Search Trees 解题报告(Python)
题目分析:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3,输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:解题思路:对于一点i,当其为根节点时,左子树的节点的个数为i-1,(为1,…i-1),右子树的个数为n-i(为,i+1,…n)。对一个根来说,唯一二叉树的个数为左子树结点的个数乘以右子树的个数。而根节点可以从1到n 中选择...原创 2019-04-18 16:56:08 · 520 阅读 · 0 评论 -
【LeetCode】94. Binary Tree Inorder Traversal 解题报告(Python)
题目分析:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]解题思路:遍历二叉树我们可以选择使用递归或者栈的方式解决递归,我们只需要判断当前节点不为None,就接着把左节点进入递归,左节点进入完毕,我们就输出,当前节点值,然后把右节点进入递归。(这与中序遍历思想相同)参考博客1栈,我们把左节点压入栈,左节点压入完毕,我...原创 2019-04-18 11:02:09 · 492 阅读 · 0 评论 -
【LeetCode】93. Restore IP Addresses 解题报告(Python)
题目分析:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]解题思路:这一题与【LeetCode】91. Decode Ways 非常相似,那个是翻译成字母这个翻译成ip,本质是相同的,那个题让求的是有几种方案而不需要求出具体样式,一般涉及字符串求几...原创 2019-04-17 17:49:25 · 438 阅读 · 0 评论 -
【LeetCode】92. Reverse Linked List II 解题报告(Python)
题目分析:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL解题思路:分成三段考虑,反转前段,反转段,反转后段反转前段,我们只需要标记记录反转点即可实...原创 2019-04-16 18:01:39 · 335 阅读 · 0 评论 -
【LeetCode】91. Decode Ways 解题报告(Python)
题目分析:一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1,B’ -> 2, … ,‘Z’ -> 26。给定一个只包含数字的非空字符串,请计算解码方法的总数。如:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。解题思路:把这个题可以分解为几种小问题进行解决,一般涉及字符串求几种情况,或者最优情况便可用动态规划...原创 2019-04-16 13:15:58 · 454 阅读 · 0 评论 -
【LeetCode】90. Subsets II 解题报告(Python)
题目分析:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。如:输入: [1,2,2]输出: [[2],[1],[1,2,2],[2,2],[1,2],[]]解题思路:(两种解法)一、这个题可以按照【LeetCode】78. Subsets的方法一递归解决(加一个当前元素是否在res里面的判断),过程及其思路请参考【LeetCo...原创 2019-04-16 00:09:02 · 255 阅读 · 0 评论 -
【LeetCode】89. Gray Code 解题报告(Python)
题目分析:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。如:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 01...原创 2019-04-16 00:08:03 · 352 阅读 · 0 评论 -
【LeetCode】88. Merge Sorted Array 解题报告(Python)
题目分析:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。如:输入:nums1 = [1,2,3,0,0,0],m = 3,nums2 = [2,...原创 2019-04-16 00:06:32 · 506 阅读 · 0 评论 -
【LeetCode】87. Scramble String 解题报告(Python)
题目分析:这个题目比较难理解,说是给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树。下图是字符串 s1 = “great” 的一种可能的表示形式。在扰乱这个字符串的过程中,我们可以挑选任何一个非叶节点,然后交换它的两个子节点。例如,如果我们挑选非叶节点 “gr” ,交换它的两个子节点,将会产生扰乱字符串 “rgeat” 。我们将 "rgeat” 称作 ...原创 2019-04-16 00:05:58 · 327 阅读 · 0 评论 -
【LeetCode】86. Partition List 解题报告(Python)
题目分析:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5解题思路:就用最简单的构建两个新的链表,然后把大于目标的放到...原创 2019-04-12 23:21:33 · 220 阅读 · 0 评论 -
【LeetCode】85. Maximal Rectangle 解题报告(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-04-12 00:28:01 · 290 阅读 · 0 评论 -
【LeetCode】84. Largest Rectangle in Histogram 解题报告(Python)
题目分析:这一题是给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。解题思路:请看参考博客,他说的很好,但是有一点可以优化,比如他的栈s={1,1,2,2,2,3},可以优化,s中面积一定第二个1,第五个2,第六个3,然后优化为存储下标s={1,4,5}。然后取出栈顶元素的下标然后找出对应的h中的元素作为高...原创 2019-04-11 22:04:44 · 418 阅读 · 0 评论 -
【LeetCode】83. Remove Duplicates from Sorted List 解题报告(Python)
题目分析:这一题是给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。如:输入: 1->1->2->3->3输出: 1->2->3解题思路:(描述的稀里糊涂,希望你能看懂)每次检查当前后面一位值是够相同,相同就事当前位的下一位为下下一位。测试代码:(非提交代码,提交代码在下面)# Definition for singly-linked ...原创 2019-04-10 10:01:01 · 314 阅读 · 0 评论 -
【LeetCode】82. Remove Duplicates from Sorted List II 解题报告(Python)
题目分析:这一题是给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。如:输入: 1->2->3->3->4->4->5输出: 1->2->5解题思路:(描述的稀里糊涂,希望你能看懂)这个题我们先逐位循环,如果下一位的值等于下下一位的值,就标记下下一位的位置。如果下一位的值不等于下下一位的值,就令指针后移,...原创 2019-04-10 00:17:12 · 260 阅读 · 0 评论 -
【LeetCode】81. Search in Rotated Sorted Array II 解题报告(Python)
题目分析:这一题是给定一个按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。要求编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。如:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true解题思路:这个题和【Leet...原创 2019-04-10 00:04:34 · 271 阅读 · 0 评论 -
【LeetCode】80. Remove Duplicates from Sorted Array II 解题报告(Python)
题目分析:这一题是给定一个排序数组,你需要在原数组删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不能使用额外的数组空间,你必须在原数组修改输入数组并在使用 O(1) 额外空间的条件下完成。(不考虑数组中超出新长度后面的元素。)如:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2,...原创 2019-04-08 14:17:17 · 341 阅读 · 0 评论 -
【LeetCode】79. Word Search 解题报告(Python)
题目分析:这一题是给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。如:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回...原创 2019-04-07 23:55:17 · 825 阅读 · 0 评论 -
【LeetCode】78. Subsets 解题报告(Python)
题目分析:这一题是给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。如:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路:(两种解法)一、这个题可以按照【LeetCode】77. Combinations的方法递归解决(最外层多加个for),过程及其思路请参考【LeetCod...原创 2019-04-06 11:11:19 · 615 阅读 · 0 评论 -
【LeetCode】77. Combinations 解题报告(Python)
题目分析:这一题是给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。如:输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]解题思路:这种题基本上是递归了,先选定一个数如[1],再往加后一位[1, 2],长度等于k了,把小列表加入res,然后return,小列表抛出最后一个2加入一个3形成[1, 3...原创 2019-04-06 10:52:02 · 731 阅读 · 0 评论 -
【LeetCode】76. Minimum Window Substring 解题报告(Python)
题目分析:这一题是给我们S和T两个串,让我们找在 S 中找出包含 T 所有字母的最小子串。解决这种题目的方法叫滑动窗口,很多子串,子数组,子序列等等的问题都是依靠这个方法解决的。解题思路:首先要知道T中所包含的字母元素及其个数(dict,字典解决)使用左右指针再S中找到一个包含T中所有元素的字串使用左指针缩小范围,更新min_len移动左指针时如果该元素存在就加回来map[s[lef...原创 2019-04-06 10:40:00 · 517 阅读 · 0 评论 -
【LeetCode】75. Sort Colors 解题报告(Python)
题目分析:这一题是让我们对【0,1,2】三个元素进行排序,但是不能用内置的排序算法,而且要求最好用一趟扫描算法,要求在原数组上作出修改。解题思路:对数组元素逐一判断,如果是0就与数组第一个元素交换位置,如果是2就与数组最后一个元素交换位置,是1不做处理。程序中设置了0元素结束位置,2元素开始位置,每次交换与标记的位置交换,不再与首个(最后一个)交换。当前位置大于2元素开始位置时退出循环。...原创 2019-04-04 21:17:44 · 265 阅读 · 0 评论 -
【LeetCode】74. Search a 2D Matrix 解题报告(Python)
题目分析:这一题其实就是一个变相的二分查找。测试代码1你可以用i标记行,j标记列。如果matrix[i][j] == target:,就返回True,如果matrix[i][j] > target:,就让j-1(往上一列),否则就让i+1(往后一个元素)。测试代码2先对最后一列进行判断,寻找目标在哪一行(二分或者循环),然后再对该行二分查找即可。测试代码1: (Runtime: 40...原创 2019-04-04 18:22:16 · 281 阅读 · 0 评论 -
【LeetCode】73. Set Matrix Zeroes 解题报告(Python)
题目分析:这一题是给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。并且让我们在原数组上做修改,我们可以先遍历一遍,用set()纪录0所在的行列。再用两个for把对应行列元素至为0。测试代码:class Solution: def setZeroes(self, matrix: list) -> None: h = set(...原创 2019-04-03 12:37:02 · 295 阅读 · 0 评论 -
【LeetCode】72. Edit Distance 解题报告(Python)
题目分析:这一题是编辑距离,给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符、删除一个字符、替换一个字符。例如:输入: word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse ->...原创 2019-04-02 16:44:48 · 675 阅读 · 0 评论 -
【LeetCode】71. Simplify Path 解题报告(Python)
题目分析:这一题是让我们简化文件路径,文件路径就是类Unix系统的。如:输入:"/a/./b/…/…/c/",输出:"/c"。我们可以先把斜杠中的串截取出来,然后判断就三种情况,遇到文字串就加入栈,遇到 ’ . ’ 不做处理,遇到 ’ … '就出栈顶层元素。解题思路:在分割元素的时候可以自己写判断分割也可以调用split(’/’)。在组合的时候可以用 ‘’.join(list)组合或者栈本身...原创 2019-04-02 11:20:54 · 447 阅读 · 0 评论 -
【LeetCode】70. Climbing Stairs 解题报告(Python)
题目分析:这一题是爬楼梯问题,每次可以走一步或者两步,让你求有多少种不同的方法可以爬到楼顶。例如:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶解题思路:你可以多算几项(1,2,3,5,8)就会发现他就是斐波那契数列,思路就是第n项可以先走一步或者两步,那就是说第n项就等于第n-1与n-2项之和,可以用动...原创 2019-04-01 13:28:36 · 362 阅读 · 0 评论 -
【LeetCode】69. Sqrt(x) 解题报告(Python)
题目分析:这一题让我们自己实现开平方根,但只需要保留到整数位就可以,这种题目往往可以用二分法解决两头夹逼解决:测试代码:class Solution: def mySqrt(self, x: int) -> int: if x in {0, 1}: return x start = 0; end = x while start &...原创 2019-03-30 22:56:45 · 305 阅读 · 0 评论 -
【LeetCode】68. Text Justification 解题报告(Python)
题目分析:这一题让我们居中字符串,就是给定一些单词,然后指定每行的字符数,然后用单词以居中的方式填充,如下:words = ["This", "is", "an", "example", "of", "text", "justification."]maxWidth = 16Output:[ "This is an", "example of text", ...原创 2019-03-30 22:53:09 · 711 阅读 · 0 评论 -
【LeetCode】67. Add Binary 解题报告(Python)
题目分析:这一题让我们求二进制相加,给定两个由’0’,‘1’组成的字符串,返回相加的字符串,规则就是满二进一。由于有’11’,‘10001’这种两个串位数不同的情况,我们先把短的串前面填充0,让它的长度和长串相等,计算会比较方便,然后逐位相加,满二进一,保留进位符用于下一位相加。加到最后如果还有进位在最前面填充’1’。这一题与【LeetCode】66. Plus One 解题报告(Python)...原创 2019-03-30 14:11:44 · 297 阅读 · 0 评论 -
【LeetCode】66. Plus One 解题报告(Python)
题目分析:这一题让我们把数组的最后以为加1。要点就是满10要进位1,下一个再加一,最后如果还有进位要记得在最前面插入一个1,其实就是通过加法原理自己写加法(类似大数相加)。测试代码:class Solution: def plusOne(self, digits: list) -> list: if digits == []: return digits ...原创 2019-03-30 14:03:54 · 336 阅读 · 0 评论 -
【LeetCode】65. Valid Number 解题报告(Python)
题目分析:这一题让我们判断一个数是否可转换为数字,开始直接调用python转换为float的函数 + 异常返回(见附),虽然通过了但感觉很过分。这题的本意应该是让我们分为很多情况逐位经过多个判断,我参考了[LeetCode] Valid Number 验证数字,我只是把他的代码转为了python版本,原作者的解析写的非常到位,不再繁叙。测试代码:#submitclass Solution:...原创 2019-03-30 13:58:22 · 517 阅读 · 0 评论 -
【LeetCode】64. Minimum Path Sum 解题报告(Python)
题目分析:这一题与【LeetCode】62. Unique Paths,【LeetCode】63. Unique Paths II相似度很高,这次是每次走的路径长度给定了,求的是最短路径,可以建立二维dp数组解决,属于较简单的动态规划。其实题目也就是让求有向图的最短路径问题。解题思路:我们创建一个与原数组行列相同的dp数组,dp数组从左上更新到右下,过程如图:从左上出发,可以向右或者向下走,...原创 2019-03-27 19:30:32 · 340 阅读 · 0 评论 -
【LeetCode】63. Unique Paths II 解题报告(Python)
题目分析:这一题与【LeetCode】62. Unique Paths基本一致,只是多了障碍物,遇到障碍物我们就令dp数组在该位置为0,可以建立二维dp数组解决,遇到障碍物我们就令dp数组在该位置为0,它每一个点的路径数与左边和上面的点路径数相关。解题思路:我们创建一个与原数组行列相同的dp数组,dp数组从左上更新到右下,过程如图:从左上出发,可以向右或者向下走,故每个点的路径数等于上面的值...原创 2019-03-26 17:14:22 · 292 阅读 · 0 评论