![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 200 阅读 · 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 · 223 阅读 · 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 · 208 阅读 · 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 · 517 阅读 · 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 · 466 阅读 · 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 · 342 阅读 · 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 · 250 阅读 · 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 · 367 阅读 · 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 · 183 阅读 · 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 · 231 阅读 · 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 · 2098 阅读 · 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 · 260 阅读 · 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 · 203 阅读 · 0 评论 -
【LeetCode】2. Add Two Numbers解题报告(Python)
题目:。将您获得两个链表,链表内容为非负整数以数字相反的顺序存储,每个节点包含一个数字两个链表整数相加后作为链表返回。例:输入:(2 - > 4 - > 3)+(5 - > 6 - > 4)输出: 7 - > 0 - > 8说明: 342 + 465 = 807。请特别注意以下情况:测试用例 说明 L1 = [0,1]...原创 2018-12-28 23:32:08 · 1356 阅读 · 0 评论 -
【LeetCode】4. Median of Two Sorted Arrays解题报告(Python)
参考博客测试代码:class Solution: def getKth(self, A, B, k): k = int(k) lenA = len(A); lenB = len(B) if lenA > lenB: return self.getKth(B, A, k) if lenA == 0: r...原创 2019-01-04 19:05:58 · 1029 阅读 · 0 评论 -
【LeetCode】3. Longest Substring Without Repeating Characters解题报告(Python)
参考链接,记得看本文最后的备注测试代码:class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int "&quot原创 2019-01-04 23:17:09 · 178 阅读 · 0 评论 -
【LeetCode】13. Roman to Integer 解题报告(Python)
题目翻译:罗马数字由七个不同的符号表示:I,V,X,L,C,D和M.符号值I 1V 5X 10L 50C 100D 500M 1000例如,两个用罗马数字写成II,只有两个加在一起。十二写为XII,简称为X + II。第二十七号写成XXVII,即XX + V + II。罗马数字通常从左到右从最大到最小。但是,四个数字不是IIII。相反,第四个写为IV。因为一个在五个之前...原创 2019-02-27 14:29:06 · 410 阅读 · 0 评论 -
【LeetCode】14. Longest Common Prefix 解题报告(Python)
题目翻译:编写一个函数来查找字符串数组中最长的公共前缀字符串。如果没有公共前缀,则返回空字符串“”。题目分析:这个题目是查找公共前缀字符串可以双循环一个一个比对,或者利用set()去发现不同元素。代码说明:if l >= len(strs[i]) or c != strs[i][l]:这句是说指针超出了某一个元素长度,或者某一位不相等了,那么返回前面相等的即可str...原创 2019-02-27 22:04:40 · 669 阅读 · 0 评论 -
【LeetCode】6. ZigZag Conversion解题报告(Python)
解题思路:这道题目的目的是将字符串摆成一个之字型,就是将字符串竖着排列,然后一列是长的一列是短的,长的列为numRows短的为numRows-2。所以用一个数组来存储每一行的字符,用变量row来记录当前访问到的行,依次将字符串s中的字符放入不同的行,然后将所有行的字符串串联起来。代码说明:1、zigzag = ['' for i in range(numRows)]表示产生numRow...原创 2019-02-23 18:04:37 · 581 阅读 · 0 评论 -
【LeetCode】15. 3Sum 解题报告(Python)
题目分析:这道题目让我想到了2Sum,所以向先固定一个数再按2Sum找,但是不可避免的出现重返列表。重复列表解决起来比较麻烦,再把结果双循环去重会TLE。所以去考虑先排序再固定一个数之后夹逼就可以了。代码说明:1、第一个if,如果笃定元素大于0,后面的一定都大于零(排过序),就不用再找另外两个。第二个if,目的是判断这个固定用的元素与上一次的相同避免无用功。target是固定的元素.j...原创 2019-02-28 10:50:16 · 318 阅读 · 1 评论 -
【LeetCode】8. String to Integer (atoi)解题报告(Python)
测试代码:class Solution: def myAtoi(self, str): str = str.lstrip() if str == '': return 0 flag = None if str[0] == '+': flag = 1 ...原创 2019-02-23 23:19:02 · 565 阅读 · 0 评论 -
【LeetCode】9. Palindrome Number解题报告(Python)
解题思路:这道题目的目的是判断数字是否为回文数,注意符号也算即-121不是回文数因为-121 != 121-。代码说明:1、str(x)将数字转换为str。2、str(x)[::-1] == str(x)对字符串使用切片方法使其倒序比较与源字符串是否相同。提交代码:class Solution: def isPalindrome(self, x): ...原创 2019-02-24 19:13:25 · 179 阅读 · 0 评论 -
【LeetCode】16. 3Sum Closest 解题报告(Python)
题目分析:这道题目与3Sum很类似,只是让返回与目标最接近的结果,所以比3Sum难一些,我们可以考虑3Sum的解法同时加入一个变量记录和与目标的差值。代码说明:1、这是存储返回的最接近的三个数的和他们与目标的差值res = nums[0] + nums[1] + nums[2]min_c = abs(target - res)2、如果差值小于最小差值,更新差值与返回值。if cha ...原创 2019-02-28 17:18:44 · 185 阅读 · 0 评论 -
【LeetCode】1. Two Sum解题报告(Python)
题目分析:这道题目是给定一个整数数组,判断是否可以使它的两个元素相加到特定目标并返回两个数字的索引。代码说明:开始想到了双重循环遍历,果然时间超限,这种情况可以建立一个字典用一次循环解决问题。循环取出nums里面的数字,使用target - nums[i]结果在keys里就证明成立了,不然就把nums[i]加入字典,注意是用数值作为下标,i作为字典里的数值。测试代码:clas...原创 2019-02-25 11:08:09 · 1443 阅读 · 0 评论 -
【LeetCode】17. Letter Combinations of a Phone Number 解题报告(Python)
题目分析:这道题目很难通过循环解决因为你事先不知道循环的层数,面对这种情况可以递归。代码说明:1、递归出来的条件就是递归到的次数等于输入串的长度if num == length:res.append(string)return2、这里要循环进入递归,可以设置断点调试很容易理解for c in ying_se[digits[num]]:dfs(num + 1, string + c...原创 2019-03-01 10:29:10 · 347 阅读 · 0 评论 -
【LeetCode】5. Longest Palindromic Substring解题报告(Python)
题目分析:这道题目是寻找字符串中最长回文字符串,很容易想到暴力求解但是题目的字符串长度是1000暴力求解需要双重循环构造子串,然后一重循环判断是否为回文字符串,所以暴力循环的时间复杂度是O(n^3),肯定时间超限。我们可以考虑动态规划去解决这个问题,大致思想如果一个字符串是回文的那么去掉首尾也一定是回文的。代码说明:1、dp = [[0] * lens for i in range(l...原创 2019-02-25 16:01:33 · 611 阅读 · 1 评论 -
【LeetCode】7. Reverse Integer解题报告(Python)
题目分析:这道题目是将数字倒序输出,我们可以先标记正负号然后转换为str倒序,最后再转换回来加上正负号,判断范围(−2^31, 2^31 − 1)输出即可。代码说明:1、int(str(x)[::-1]),x转str再使用切片倒序再转为int。测试代码:class Solution(object): def reverse(self, x): x =...原创 2019-02-25 16:15:12 · 337 阅读 · 0 评论 -
【LeetCode】18. 4Sum Closest 解题报告(Python)
题目分析:这道题目与3Sum类似,只是变成了4Sum,可以再3Sum外加一层循环解决,在网上看到了另一种解法,先两两相加存到字典里,再双循环让目标减去两个数看结果是否在字典里,时间复杂度由O(n3)变为O(n2),所以我提供两种解法。第一种方法使用了字典,用空间换取时间,消耗大概是160ms,第二种消耗大概是1000ms。第一种:字典查询法代码说明:1、双循环生成字典for i in r...原创 2019-03-01 17:16:31 · 153 阅读 · 0 评论 -
【LeetCode】10. Regular Expression Matching解题报告(Python)
题目分析:这道题目是实现简单的正则表达式,需要实现'.'与'*',其中'.'可表示任何字符,'*'表示前一个字符出现0或任意次。首先想到贪心穷举的方法去解决但是考虑到类似'.*'这种可以变成任意串的东西很难穷举。考虑其他方法,其中递归便是一种,将问题分为子问题去考虑。一般情况下递归可转换为动态规划,动态规划可以用空间换取时间,由于递归时间长可能会时间超限我们也应该考虑使用动态规划解决。递归...原创 2019-02-25 22:13:17 · 1861 阅读 · 0 评论 -
【LeetCode】19. Remove Nth Node From End of List 解题报告(Python)
题目分析:给定链表,从链表末尾删除倒数第n个节点并返回新的头部。由于题目要求遍历一次完成操作所以不可能找到长度在删除。借鉴网上的一种做法,设置两个指针。前面的指针走n个元素,后面的指针再走。这样前面的走到最后时后面的指针刚好指到要删除的前一个元素。代码说明:1、前面元素走n次for i in range(n):begin = begin.next2、如果前面指针走完是空了,那么要删除的...原创 2019-03-01 21:52:33 · 384 阅读 · 0 评论 -
【LeetCode】20. Valid Parentheses 解题报告(Python)
题目分析:这一题是匹配括号的问题,用栈去匹配可以解决。代码说明:1、这如果res里有元素且和下一个括号匹配,那就删除res最后一位,res是栈,i是res的长度。 if i > 0 and c == ')' and res[i - 1] == '(': res = res[:i - 1] i -= 12、其他情况入栈...原创 2019-03-01 22:48:36 · 327 阅读 · 0 评论 -
【LeetCode】21. Merge Two Sorted Lists 解题报告(Python)
题目分析:这一题是让把两个有序的链表合并成一个有序的链表,可以创建一个新链表,然后比较那两个链表的值逐一添加到新链表就可以了。代码说明:1、while(l1 and l2):,循环比较添加到新链表2、l_bf.next = l1 if l1 is not None else l2,某一链表为空跳出循环,这时候只需要把另一不为空的链表添加到l后面即可(l_bf是l的尾指针)3、return...原创 2019-03-02 08:49:42 · 240 阅读 · 0 评论 -
【LeetCode】22. Generate Parentheses 解题报告(Python)
题目分析:这一题是让输入正整数n表示n对括号,然后输出括号所有匹配数,与【LeetCode】17. Letter Combinations of a Phone Number是有些相似的,因为可能的情况很多用循环没法解决,这时候考虑递归或动态规划,递归的代码比较简单,用递归便可解决。代码说明:1、def dfs(res, string, n, l, r):,递归函数的参数意义分别为,返回用的...原创 2019-03-02 10:21:23 · 479 阅读 · 0 评论 -
【LeetCode】23. Merge k Sorted Lists 解题报告(Python)
题目分析:这一题是把n个有序链表合成一条有序链表。1、可以先创建一条新链表,再把n个有序链表的head放入字典,然后选出最小值,把最小的值加入新链表。2、然后把最小值从字典中删除,同时也把那个节点从小链表中删除,并把下一个节点值加入字典。3、循环1、2知道字典为空。代码说明:1、给字典赋初值(每个链表的第一个元素) for i in range(len(lists)): ...原创 2019-03-02 17:29:54 · 514 阅读 · 0 评论 -
【LeetCode】11. Container With Most Water 解题报告(Python)
题目分析:给定n个数的链表(n>=2),把数值当做柱体的高,横坐标差当做底(相邻差值为1),计算构成的最大的面积,如图所示:Input: [1,8,6,2,5,4,8,3,7]Output: 49首先想到暴力双循环,emm我这智商也是够了(TLE),应该用两个指针一左一右向中间移动进行计算。代码说明:定义i和j两个指针分别指向数组的左右两端,然后两个指针向中间搜索...原创 2019-02-26 16:53:26 · 236 阅读 · 0 评论 -
【LeetCode】12. Integer to Roman 解题报告(Python)
题目翻译:罗马数字由七个不同的符号表示:I,V,X,L,C,D和M.符号值I 1V 5X 10L 50C 100D 500M 1000例如,两个用罗马数字写成II,只有两个加在一起。十二写为XII,简称为X + II。第二十七号写成XXVII,即XX + V + II。罗马数字通常从左到右从最大到最小。但是,四个数字不是IIII。相反,第四个写为IV。因为一个在五个之前...原创 2019-02-27 09:34:36 · 500 阅读 · 0 评论 -
【LeetCode】24. Swap Nodes in Pairs 解题报告(Python)
题目分析:这一题是把有序链表相邻的两个值进行两两交换,可以用两种方法解决。1、创建一个新链表,逐个读取旧链表的值插入构成新链表。2、直接更新原链表的值。代码说明(1):1、如果是第偶数项(从0开始)且为最后一个,那就不用交换,直接令新链表的下一项为最后一个即可。(如1->2->3种的3)if i % 2 == 0 and not head.next:bf.next = L...原创 2019-03-06 17:15:44 · 466 阅读 · 0 评论 -
【LeetCode】30. Substring with Concatenation of All Words 解题报告(Python)
题目分析:这一题是有一点难度,它的意思是给定一个字符串s和一些长度相同的单词words。在s中找出可以恰好串联 words中所有单词的子串的起始位置。注意子串要与words中的单词完全匹配,中间不能有其他字符,但不需要考虑words中单词串联的顺序。比如:s = “barfoothefoobarman”,words = [“foo”,“bar”]Output: [0,9]代码说明:先...原创 2019-03-09 10:21:12 · 455 阅读 · 0 评论 -
【LeetCode】31. Next Permutation 解题报告(Python)
题目分析:这一题是让我们返回一个恰好大于给定序列的数的序列,如果找不到(即原序列是最大的)就倒序返回。例子:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1代码说明:上面的例子较短不容易找到规律,如果给定序列:1 2 7 4 3 1,那么结果应该是1 3 1 2 4 7。变换过程如下:1 2 7 4 3 11 2 ...原创 2019-03-09 15:39:49 · 211 阅读 · 0 评论 -
【LeetCode】25. Reverse Nodes in k-Group 解题报告(Python)
题目分析:这一题是把有序链表每相邻的k个值倒序,最后不足k个值就直接保持输出。这一题比较有难度,单独写一个反序函数会比较明了代码说明:1、reverse是反序函数,如k=4时它的操作过程如下(输入为1 -> 2 -> 3 -> 4 -> 5,0是它附加的头):0 -> 2 -> 1 -> 3 -> 4 -> 50 -> 3 -&...原创 2019-03-06 22:58:44 · 921 阅读 · 0 评论