LeetCode(简单题)
力扣简单题思路以及代码,当前发布不代表最终结果,后期会不定时更新旧代码或新思路
Scdh2020
这个作者很懒,什么都没留下…
展开
-
LeetCode(python3) #125 验证回文串
#125 验证回文串解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:这题比较简单,就直接用自己的思路发出来。 思路:看了一下比较简洁的思路基本上都是以下几点:1.转小写 2.去符号 3.反转比较 注意:需要注意的是正则表达式中“\W”不包含下划线。 二.代码展示 import re class Solution: def isPalindrome(self, s): # 正则表达式去除特殊符号 字符串转小写 s = re.sub('[\W|_]原创 2020-11-13 14:06:54 · 85 阅读 · 0 评论 -
LeetCode(python3) #122 股票卖出的最佳时机II
#122 股票卖出的最佳时机II解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:这一题参考了一下大佬题解,漂亮的解法,且思路简单。 思路:只要所有上涨交易日都卖就能达到收益最大。 注意:需要注意的是循环体是第二天开始循环,用第二天-前一天。 二.代码展示 class Solution: def maxProfit(self, prices): # 记录累积收益 profit_max = 0 # 从第二天开始(第二天-前一天 = 收益)原创 2020-11-12 14:16:15 · 141 阅读 · 1 评论 -
LeetCode(python3) #121 卖股票的最佳时机
#121 卖股票的最佳时机解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:本题自己的解法和官方的解法,自己写的解法直接用双指针来操作的,官方解法通过比较当前最小值和当前最大收益来更新迭代寻找最大收益 思路1:首先定义卖出价指针和买入价指针,循环判断卖出价-买入价的状态来判断当前最小买入价和更新最大收益。 思路2:官方的题解,循环过程中会找到最小的买入价,然后通过循环中比较卖出价-当前最小买入价,不断更新最大收益。 注意:需要注意的是官方题解中出手最小值要设置大一点,务必让第一个元素一定比它小。原创 2020-11-11 15:18:59 · 152 阅读 · 0 评论 -
LeetCode(python3) #88 合并两个有序数组
#88 合并两个有序数组解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路:自己思路是双指针,但是想歪了,写出了一个双循环…所以就没贴出来了,然后看了官方题解后感慨,遇到数组题还是先考虑双指针! 注意:要注意的是指针移动。 二.代码展示 class Solution: def merge(self, nums1, m, nums2, n): """ 简介:直接合并,然后查询排序 时间复杂度:O( (n+m)log(n+m) )原创 2020-11-09 16:33:57 · 103 阅读 · 0 评论 -
LeetCode(python3) #83 删除排序链表中的重复元素
#83 删除排序链表中的重复元素解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:这题了解一下链表这个数据结构就比较简单,思路理不清楚纸上画一画就明白了。 思路:通过基础遍历,判断前一位与后一位是否重复,重复就前一位跳过后一位 注意:需要注意的是负数需要有一个负号摘取和补回的操作。 二.代码展示 三.总结其他 总结:这个题目最笨的方式就是通过循环来进行反转操作,我们这边使用的就是利用切片来简化反转过程,不会使用到循环,所以效率会较高。 优化:优化的地方就是还可以通过数学位运算等方法来进行反转原创 2020-11-05 16:14:59 · 146 阅读 · 0 评论 -
LeetCode(python3) #21 合并两个有序链表
#21 合并两个有序链表解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:这题一开始是因为忘记了链表这个数据结构所以直接懵逼了,后面去补了一下链表结构后,就比较清楚了大概操作,但是还不够,于是又去参考了一下官方文档说明,发现只需要创建一个头节点就能解决丢失问题(一开始自己想偏了,忽视了能创建节点这个点) 思路:创建一个头节点,和一个游标。通过一次遍历(l1和l2都不为None),判断节点大小,用游标节点来链接较小的节点,最后将不为None的链表挂载到游标节点最后即可。 注意:需要l1和l2的节点原创 2020-11-05 11:53:38 · 70 阅读 · 0 评论 -
LeetCode(python3) #69 x的平方根
#69 x的平方根解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:之后做题我还是秉承简答题简单做的理念来进行题解(好吧,其实我比较忙,还要其他事)。然后在花时间将其他解法在后面在补上。 思路1:这题直接使用python **乘方运算符解决,平方根相当于x的0.5次方,然后int取整即可 二.代码展示 class Solution: # 乘方运算符题解 def mySqrt(self, x: int) -> int: return int(x ** 0.5) 三原创 2020-10-27 10:35:48 · 201 阅读 · 0 评论 -
LeetCode(python3) #67 二进制求和
#67 二进制求和解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路1:简答题简单解,用python内置函数,别弄花里胡哨的,何必程序员难为程序员呢… 思路2:通过二进制0,1,进位,可以逆序相加的题解。 说明:有点忙,思路二后面补上。 二.代码展示 class Solution: def addBinary(self, a: str, b: str) -> str: # 将a,b转化为十进制 a = int(a, 2) b = int原创 2020-10-24 12:30:14 · 236 阅读 · 0 评论 -
LeetCode(python3) #66 加一
#66 加一解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路1:内置函数题解,将列表转换为整形数字进行加一然后转换回整形列表 思路2:逆序遍历题解,逆序遍历列表将最后一位加1。会有两种情况: 第一种 最后一位是9或者不是9 是9变为0,不是9加1 第二种 列表都是9,进位的同事需要在最前面加1 [9,9]+1 => [1,0,0] (这种情况列表会比原来多一位) 注意:需要注意的是9进位和列表全是9加1后需要多出1位的操作。 二.代码展示 #内置函数题解 class Solution:原创 2020-10-23 12:05:54 · 110 阅读 · 0 评论 -
LeetCode(python3) #58 最后一个单词的长度
#58 最后一个单词的长度解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路1:用Python内置函数通过空格分割字符串为列表,然后取出最后一个元素求出长度即可。 思路2:参考了一下题解,通过双指针逆序循环找字符串的方式。 注意:需要注意的是传入字符串可能全是空格或者直接为空。 二.代码展示 # 内置函数题解 class Solution: def lengthOfLastWord(self, s): # 工具空格字符串分割(例如:hello world => ['h原创 2020-10-22 14:42:49 · 101 阅读 · 0 评论 -
LeetCode(python3) #53 最大子序和
#53 最大子序和解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:我傻眼了好吧,一开始用暴力解法,结果超时了…由于算法底子不行就去看大佬们的题解,结果就是动态规划?分治法?贪心算法? 思路:我参考了一个动态规划题解(能读懂,就是缺基础理论),结果真香,真的是优雅高效。 留坑:这里就留个坑,看书,看视频去。后续将动态规划、分治法、贪心这些算法原理都写一篇博客出来。然后题目都二刷,不懂算法做什么算法题,只会暴力破解(大力出奇迹…) 注意:最大序列号和res的初始值不能为0,因为nums可能为[-1原创 2020-10-21 11:50:06 · 93 阅读 · 0 评论 -
LeetCode(python3) #38 外观数列
#38 外观数列解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路:这题用的是双指针来做的,我这个写法效率比较低,后面准备参考一下别的双指针解法和递归解法,更新一下题解。 注意:先读懂题目,没看懂的看一下力扣上这题的评论区。 二.代码展示 class Solution: def countAndSay(self, n): res = "1" # 循环n-1次(因为第一次已经默认是1了) for _ in range(n-1):原创 2020-10-20 17:00:18 · 169 阅读 · 0 评论 -
LeetCode(python3) #35 搜索插入位置
#35 搜索插入位置解法一.解题思路二.代码展示三.总结其他 一.解题思路 说明:这题先用一个大家通常能想到的题解先提交了,后续我抽空会把其他解法补充上(各种查找算法),该题会持续更新。 思路1:内置函数解法 待更新… 二.代码展示 # 内置函数解法 class Solution: def searchInsert(self, nums, target): nums.append(target) nums.sort() return nums.inde原创 2020-10-19 14:39:38 · 111 阅读 · 0 评论 -
LeetCode(python3) #28 实现strStr()
@[TOC](#28 实现strStr()解法) 一.解题思路 思路1:没什么好说的,就是Python的字符串内置函数find完美复合题目要求。 思路2:“滑动窗口”比较基础的做法了,首先把0和-1的情况判断掉,然后循环查找字符串的长度次,最后就是不断匹配了。例子如下 例子:hello ll i=0 判断 he == ll 不匹配 i+=1 i->1 判断 el == ll 不匹配 i+=1 i->2 判断 ll == ll 匹配 返回2 二.代码展示 # py原创 2020-10-18 13:08:19 · 98 阅读 · 0 评论 -
LeetCode(python3) #27 移除元素
#x xxx解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路:主要思路就是通过将数字转化为字符串,然后通过字符串的切片进行处理和反转来完成题目要求 注意:需要注意的是负数需要有一个负号摘取和补回的操作。 二.代码展示 三.总结其他 总结:这个题目最笨的方式就是通过循环来进行反转操作,我们这边使用的就是利用切片来简化反转过程,不会使用到循环,所以效率会较高。 优化:优化的地方就是还可以通过数学位运算等方法来进行反转,本人会在后面涉及到相关知识后回来进行更新优化。 交流:如果有什么建议或者疑问可原创 2020-10-17 10:17:01 · 150 阅读 · 1 评论 -
LeetCode(python3) #26 删除排序数组中的重复项
#26 删除排序数组中的重复项解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路:这题由于我不太确定那种操作不是原地修改的,所以我直接参考了官方的双指针解法。 解释:i表示慢指针、j表示快指针 1.nums[i] == nums[j] 时j+1跳过重复 2.nums[i] != nums[j] 说明遇到不重复的,需要 i+=1,nums[i] = nums[j],j+=1 3.循环1,2操作 4.最后返回不重复的长度就是i+1 注意:nums后面多余的元素不用处理。例如输入:[1,2,3,3,4]原创 2020-10-16 16:24:37 · 92 阅读 · 0 评论 -
LeetCode(python3) #20 有效的括号
#20 有效的括号解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路:做这题前我了解了一下括号匹配思路,比较常规的就是通过入栈出栈的方式。 解释:简单来说入栈出栈的方式就是:先遍历字符串的每一个字符,判断是否是左括号,如果是左括号就入栈,当匹配到右括号时,就弹出栈中的一个左括号来匹配,由于栈的特点后进先出所以最后入栈的左括号一定是和出现的这个右括号匹配的。 举例1:"{()}" ‘{’=>入栈,’(’=>入栈,’)’=>出栈’(‘匹配’)’,’}’=>出栈’{‘匹配’}’原创 2020-10-15 16:03:30 · 128 阅读 · 0 评论 -
LeetCode(python3) #14 最长公共前缀
#14 最长公共前缀解法一.解题思路二.代码展示三.总结其他 一.解题思路 思路:这次没什么好的思路,就是用最憨的方法做出的,主要还是python函数储备少了,算法了解少了点。后面参考了一个不错的解法,大家可以对比一下,优雅的代码和憨憨(我的)代码的视觉体验。 交流:如果有什么建议或者疑问可以在文章下面回复哈,期待交流。 二.代码展示 # 我的憨憨解法 class Solution: def longestCommonPrefix(self, strs): # 列表为空直接返回空字符原创 2020-10-14 13:19:40 · 149 阅读 · 1 评论 -
LeetCode(python3) #13 罗马数字转整数
#13 罗马数字转整数题解一.解题思路二.代码展示三.总结其他 一.解题思路 思路:这题本人做法比较常规,略有些偷懒。将非重复的组合先列好在字典中,然后循环判断字典中的key是否出现在字符串中,若出现则累加数值,之后将字符串中的对应key删除 参考:这里我也参考了别人不错(不偷懒)的做法,就是按照题目规则:将字符串里前一位与后一位字符比大小,若前一位小于后一位那么则减前一位,反之则加前一位。 二.代码展示 # 自己的解法 class Solution: def romanToInt(self, s)原创 2020-10-13 15:10:32 · 198 阅读 · 1 评论 -
LeetCode(python3) #9 回文数
#9 回文数题解一.解题思路二.代码展示三.总结其他 一.解题思路 思路:主要思路就是通过将数字转化为字符串,然后通过字符串反转与原数字对比即可判断是否为回文数。 进阶:进阶要求是不通过字符串的方式解决,那么可以使用取模运算的方式来反转拼接数字。 二.代码展示 # 字符串反转方式 class Solution: # 字符串处理方式 def isPalindrome(self, x): # 首先转换为字符串 str_x = str(x) # 用字原创 2020-10-12 15:16:50 · 180 阅读 · 0 评论 -
LeetCode(python3) #7 整数反转
#7 整数反转题解一.解题思路二.代码展示三.总结其他 一.解题思路 思路:主要思路就是通过将数字转化为字符串,然后通过字符串的切片进行处理和反转来完成题目要求 注意:需要注意的是负数需要有一个负号摘取和补回的操作。 二.代码展示 class Solution: def reverse(self, x): # 首先将数字类型的x转化为字符串形式 x = str(x) # 判断字符串是否带符号 if x[:1] == "-":原创 2020-10-11 11:40:32 · 142 阅读 · 0 评论 -
LeetCode(python3) #1 两数之和
#1 两数之和题解一.解题思路二.代码展示三.总结其他 一.解题思路 思路:主要思路就是用target减去列表中的每一个元素,查看其差值是否在剩余的列表中,如果在则获取下标即可 注意:需要注意的是需要避免重复的情况,例如target:6, nums:[3,3] 正确答案应该是[0,1]或[1,0]而不是[0,0]或[1,1] 二.代码展示 class Solution: # v1.0版本(后续会优化) def twoSum(self, nums, target): # 首先循环列表原创 2020-10-10 15:51:17 · 52 阅读 · 0 评论