经典前100
offerNotFound
梦想很伟大,过好每一天!
展开
-
LeetCode 15.三数之和
解题思路在两数之和的基础上去解,用排序加双指针即可,先固定第一个值,再用双指针去找另外两个值,如果和大于 0,那就说明 right 的值太大,需要左移。如果和小于 0,那就说明 left 的值太小,需要右移代码:class Solution(object): def threeSum(self, nums): n=len(nums) res=[] if(not nums or n<3): return []原创 2021-01-24 16:57:33 · 59 阅读 · 1 评论 -
LeetCode 83.删除排序链表中的重复元素
解题思路用node来当做当前节点,node.next当做下一节点,用while循环来遍历链表;遍历玩链表挤结束,还需要判断下头结点head与node是否为空,如果遍历过程中当前节点与下一节点相同则删除一个,即 node.next=node.next.next,如不相同则继续遍历代码:class Solution(object): def deleteDuplicates(self, head): node=head while node and node.next:原创 2021-01-23 16:49:54 · 64 阅读 · 0 评论 -
LeetCode 69.x的平方根
解题思路方法一:调用库来解决代码:import mathclass Solution(object): def mySqrt(self, x): return int(math.sqrt(x))方法二:暴力解法,先假设根为1(自加),再一直判断根的平方是否满足<=x,不满足时返回根-1代码:class Solution(object): def mySqrt(self, x): sqrt=1 while sqrt**2<=x:原创 2021-01-23 15:35:36 · 67 阅读 · 0 评论 -
LeetCode 58.最后一个单词的长度
解题思路split()函数删除空格再将数组倒序,遍历一遍返回开头不是空格的第一个单词的长度代码:class Solution(object): def lengthOfLastWord(self, s): r = s.split(" ") r.reverse() for i in r: if i: return len(i) return 0...原创 2021-01-22 16:20:20 · 58 阅读 · 0 评论 -
LeetCode 53.最大子序和
解题思路对于当前数字,若前面的几个数字的和为正,则加上前面的数字组的和作为新的最大子数组,若前面的数字组的和为负则保留自身作为新的最大子数组得开头;每次遍历后都与当前最大子数组和做比较,保留较大者。代码:class Solution: def maxSubArray(self, nums: List[int]) -> int: maxSum = tempSum= nums[0] for num in nums[1:]: tempSu原创 2021-01-21 16:42:51 · 52 阅读 · 0 评论 -
LeetCode 35.搜索插入位置
解题思路target在nums中,直接遍历查找给下标,不在的话加入nums中排序再给下标代码:class Solution(object): def searchInsert(self, nums, target): for i in range(len(nums)): if nums[i]==target: return i else: nums.append(ta原创 2021-01-21 16:17:09 · 51 阅读 · 0 评论 -
LeetCode 27.移除元素
解题思路将不等于val的元素转进新的链表中,使用双指针,i相当于新链表,j相当于原链表代码:class Solution(object): def removeElement(self, nums, val): i = 0 for j in range(0,len(nums)): if nums[j]!=val: nums[i]=nums[j] i+=1 re原创 2021-01-20 16:15:32 · 109 阅读 · 1 评论 -
LeetCode二十题 有效的括号
解题思路使用栈的方法,栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空代码:class Solution(object): def isValid(self, s): if not s: return True size = len(s) # s的长度为奇数或者以某个右括号开头,返回False if size % 2 o原创 2021-01-20 15:10:12 · 74 阅读 · 0 评论 -
LeetCode十四题 最长公共前缀
解题思路将字符串进行sort()排序,然后再比较字符串内第一个单词与最后一个单词的共同项(sort排序是根据26个字母顺序先后排序,所以不用看中的单词)代码:class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: k="" if not strs: return k strs.sort() n=len(strs)原创 2021-01-18 16:27:30 · 66 阅读 · 0 评论 -
LeetCode十三 罗马数字转整数
解题思路对罗马字符建立相应的整数字典,对罗马字符串从左向右遍历,若当一个字符大于其右边的字符时,则加上该值,否则减去该值。代码:class Solution(object): def romanToInt(self, s): x=0 dic={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} for i in range(len(s)): if i<len(s)-原创 2021-01-17 16:54:32 · 57 阅读 · 0 评论 -
LeetCode第九题 回文数
解题思路解法一:(最容易理解,当然没效率可言…)整数取余得倒序后的数,再相比代码:class Solution(object): def isPalindrome(self, x): y =x a = 0 while y>0: a=a*10 + y%10 y = y//10 return a==x解法二:转化成字符串或列表,一行搞定代码:class Solution原创 2021-01-17 16:30:19 · 56 阅读 · 0 评论 -
leetcode第七题 整数反转
解题思路例子:1234 -> 4321,不难发现个位数变千位数,十位数变百位数,百位数变十位数,千位数变个位数。所以我们得到字符串的最后一位,进行倍数变化操作就行。代码:class Solution(object): def reverse(self, x): a = 0 while x!=0: if x>0: a=a*10+x%10 x = x//10 else: a=a*10+x%-10 x = -(x//-10) retur原创 2021-01-16 16:07:11 · 74 阅读 · 0 评论 -
leetCode第三题 无重复字符的最长子串
学习他人答法解题思路举个例子,字符串S=“abc”,其无重复最长子串是’abc’,那么再在字符串‘abc’后加个字符’d’,变成字符串S1’‘abcd’,其无重复最长子串是什么?S结尾加上’d’之后,最长无重复子串有两种可能:最长无重复子串包含新增的’d’,即’cd’最长无重复子串不包含新增的’d’,即S1的最长无重复子串’abc’比较’cd’与’abc’,len(‘abc’)>len(‘cd’),所以S1的最长无重复子串依然是’abc’所以已知一个字符串Si,其长度为L,在Si末尾加入原创 2021-01-16 15:37:57 · 87 阅读 · 0 评论 -
leetcode练习题2 两数相加
LeetCode经典前100大三了,也快准备实习了,就开始从基础慢慢捡起来嚼烂吧(做LeetCode的经典前100是真的太虐人,我也太菜了…)记录下自己的做题过程题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。自己思考加看其他答主给出的题解,我的理解为:有两种特殊情况:1、两链表长度不相等,如899+155原创 2021-01-15 15:49:14 · 110 阅读 · 0 评论