
LeetCode
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】125. Valid Palindrome 解题报告(Python)
题目大意:验证回文字符串,忽略大小写,空格解题思路:1.全转化为小写2.左右指针标记,左要小于右,进入循环3.非字母数字直接移动指针4.左右相同,同时移动指针5.左右不同直接返回错误提交代码:(Runtime: 48 ms, faster than 69.48 % )class Solution: def isPalindrome(self, s: str) -> bool: s = s.lower() left, right = 0, le原创 2020-10-18 09:13:50 · 306 阅读 · 0 评论 -
【LeetCode】1002. Find Common Characters 解题报告(Python)
题目大意:查找多个字符串交集字母一开始我想用set求交集去做,后来发现涉及到两个‘l’时set指挥保留一个,所以就用最基本的思路做吧。解题思路:1.对于26个字母出现次数初始化为最大值2.循环这个输入列表3.对于每个单词用ascii码作为下标,记录出现次数4.取26个字母总的出现次数与当前单词出现次数的最少次提交代码:(Runtime: 56 ms, faster than 46.38 % )class Solution: def commonChars(self, A: 'Li原创 2020-10-17 17:43:02 · 272 阅读 · 1 评论 -
【LeetCode】124. Binary Tree Maximum Path Sum 解题报告(Python)
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 输出: 42解题思路:递归,涉及到树的题目一般采用递归的方式。首先判断左子树的和,如果是负数就返回0然后判原创 2020-07-06 15:49:08 · 642 阅读 · 0 评论 -
【LeetCode】123. Best Time to Buy and Sell Stock III 解题报告(Python)
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候原创 2020-07-06 00:49:32 · 569 阅读 · 0 评论 -
【LeetCode】122. Best Time to Buy and Sell Stock II 解题报告(Python)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6原创 2020-07-05 23:23:20 · 438 阅读 · 0 评论 -
【LeetCode】121. Best Time to Buy and Sell Stock 解题报告(Python)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。示例 2:输入: [7原创 2020-07-05 22:45:24 · 375 阅读 · 0 评论 -
【LeetCode】120. Triangle 解题报告(Python)
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。解题思路:这个题求从上到下的最小路径和,看起来可以用动态规划解决,(动态规划通常可以求解最优解,有几种结果等问题)这一题情况比较多,我们要分开考虑,并且从原创 2020-07-05 22:28:57 · 468 阅读 · 0 评论 -
【LeetCode】119. Pascal‘s Triangle II 解题报告(Python)
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]解题思路1:这个题与【LeetCode】118. Pascal‘s Triangle 解题报告(Python)一致,可以稍稍优化一下118的算法,每次保存上一行,根据上一行计算当前行即可提交代码1:(动态规划,Runtime: 36 ms, faster than 89.08 % )class Solution: def ge原创 2020-07-05 19:35:51 · 247 阅读 · 0 评论 -
【LeetCode】118. Pascal‘s Triangle 解题报告(Python)
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。解题思路:可以看出来每一行除了开始和结尾的1,其他位置元素都与上一行有关,那这就让我想到了动态规划这一行的值=上一行的上一列+上一行的这一列元素,即dp[i][j] = dp[i-1][j-1] + dp[i-1][j]提交代码:(动态规划,Runtime: 40 ms, faster than 65.14 % )class Solution: def generat原创 2020-07-05 18:59:18 · 291 阅读 · 0 评论 -
【LeetCode】117. Populating Next Right Pointers in Each Node II 解题报告(Python)
给定一个二叉树struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。解题思路1:这一题和【LeetCode】116. Populating原创 2020-07-05 18:28:24 · 2171 阅读 · 0 评论 -
【LeetCode】116. Populating Next Right Pointers in Each Node 解题报告(Python)
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:解题思路1:这一题可以采用队列层序遍历的方法(指向下一个会有一个判断,不能时当前层的最后一个,及1,3原创 2020-07-05 10:30:17 · 358 阅读 · 0 评论 -
【LeetCode】115. Distinct Subsequences 解题报告(Python)
这个题是要求不同子序列有几种组法,给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)示例 1:输入:S = “rabbbit”, T = “rabbit”输出:3解释:如下图所示, 有 3 种可以从 S 中得到 “rabbit” 的方案。(上箭头符号 ^ 表示选取的字母)rabbbit^原创 2020-07-05 09:30:05 · 267 阅读 · 0 评论 -
【LeetCode】114. Flatten Binary Tree to Linked List 解题报告(Python)
题目分析:给定一个二叉树,原地将它展开为链表。例如,给定二叉树将其展开为:解题思路:看其展开的顺序是类似前序遍历,但是解题还是需要思路,二叉树一般可以用递归和非递归解决(1)递归变换过程 1 / \ 2 5 / \ \ 3 4 6 1 / \ 2 5 \...原创 2019-05-29 22:47:01 · 298 阅读 · 0 评论 -
【LeetCode】113. Path Sum II 解题报告(Python)
题目分析:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回: [[5,4,11,2],[5,8,4,5]]解题思路:这一题是【LeetCode】112. Path Sum的进阶版,比上一题要稍微难一些,但是用上一题的思路可以解决。如果根节点为空,直接返回...原创 2019-05-28 22:37:07 · 299 阅读 · 0 评论 -
【LeetCode】112. Path Sum 解题报告(Python)
题目分析:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22,返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。解题思路:根节点为空:返回Falseif not root: re...原创 2019-05-28 16:34:54 · 445 阅读 · 0 评论 -
【LeetCode】111. Minimum Depth of Binary Tree 解题报告(Python)
题目分析:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最小深度 2.解题思路:与【LeetCode】104. Maximum Depth of Binary Tree 一致,把【LeetCode】104. Maximum Dep...原创 2019-05-27 20:45:33 · 504 阅读 · 0 评论 -
【LeetCode】110. Balanced Binary Tree 解题报告(Python)
题目分析:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false 。解题思路:思路一:我们在【LeetCode】104. ...原创 2019-05-26 11:36:10 · 740 阅读 · 0 评论 -
【LeetCode】109. Convert Sorted List to Binary Search Tree 解题报告(Python)
题目分析:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:解题思路:这一题继续用【LeetCode】10...原创 2019-05-25 11:28:23 · 338 阅读 · 0 评论 -
【LeetCode】108. Convert Sorted Array to Binary Search Tree 解题报告(Python)
题目分析:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:解题思路:这一题利用二分查找与递归的思想解决,因为是把一个有序的数组转换成二叉...原创 2019-05-25 11:12:35 · 391 阅读 · 0 评论 -
【LeetCode】107. Binary Tree Level Order Traversal II 解题报告(Python)
题目分析:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],返回其自底向上的层次遍历为:[[15,7], [9,20],[3]]解题思路:这一题与【LeetCode】102. Binary Tree Level Order Traversal思路相同,就是递归中序...原创 2019-05-23 19:51:47 · 336 阅读 · 0 评论 -
【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告(Python)
题目分析:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7],后序遍历 postorder = [9,15,7,20,3]。返回如下的二叉树:解题思路:这一题与105. Construct Binary Tree from Preorder and Inorder Traversal基本完全相同...原创 2019-05-23 10:33:16 · 437 阅读 · 0 评论 -
【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告(Python)
题目分析:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出:前序遍历 preorder = [3,9,20,15,7]、中序遍历 inorder = [9,3,15,20,7]。返回如下的二叉树:解题思路:这一题我们首先需要找到构造二叉树的规律:preorder: 3 9 20 15 7inorder: 9 3 15 ...原创 2019-05-22 22:04:02 · 276 阅读 · 0 评论 -
【LeetCode】104. Maximum Depth of Binary Tree 解题报告(Python)
题目分析:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。解题思路:这一题可以用深度遍历和广度遍历解决,深度遍历采用递归,广度遍历使用队列的思想。这一题可以说是一个非常经典的递归题目。提交代码1:(深度遍历,递归...原创 2019-05-21 16:44:21 · 566 阅读 · 3 评论 -
【LeetCode】103. Binary Tree Zigzag Level Order Traversal 解题报告(Python)
题目分析:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]解题思路:、这一题本质还是遍历,使用递归进行遍历。关键就是用一个变量去储存当前层数res[level].append(roo...原创 2019-05-21 11:28:53 · 967 阅读 · 0 评论 -
【LeetCode】102. Binary Tree Level Order Traversal 解题报告(Python)
题目分析:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],返回其层次遍历结果:[[3],[9,20],[15,7]]解题思路:这一题的本质还是遍历,使用递归进行遍历。关键就是用一个变量去储存当前层数res[level].append(root.val) 。提交代码:(递归,Runti...原创 2019-05-20 23:55:26 · 378 阅读 · 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 评论