Python-----LeetCode刷题日志1.0(基础20题)
创始人
2024-06-03 09:26:48
0

 目录

前言:

1.两数之和

 2.回文数

3.最长公共前缀

4.有效的括号

5.删除有序数组中的重复项

6.移除元素

 7.最后一个单词的长度

8.爬楼梯 

 9.合并两个有序数组

10.杨辉三角

 10.验证回文串

11.买卖股票的最佳时机 

 12.多数元素

 13.位1的个数

14. 同构字符串

15.存在重复元素 

 16.存在重复元素 II

 17.搜索插入位置

 18.二进制求和

19.有效的字母异位词 

20.丢失的数字


前言:

        这里我给大家分享我最近在LeetCode刷的题,大概20道左右,编程语言:Python。希望大家喜欢。

1.两数之和

最直接的做法就是利用双层循环,直接去找这两个数字,让它们相加对于target的值,如果找到就把这两个数字添加到列表li中返回,代码如下 :

class Solution(object):def twoSum(self, num, target):""":type nums: List[int]:type target: int:rtype: List[int]"""li=[]for i in range(len(num)):for j in range(i+1,len(num)):if target==num[i]+num[j]:li.append(i)li.append(j)breakreturn li

 2.回文数

先把这个数字转换为字符串形式,然后我们可以去通过正序和倒序去一一对比每个字符,如果出现不同就返回False,代码如下:

class Solution(object):def isPalindrome(self, x):""":type x: int:rtype: bool"""x=str(x)for (i,j) in zip(range(len(x)),range(len(x)-1,-1,-1)):if x[i]!=x[j]:return Falsereturn True

3.最长公共前缀

 这道题我们可以去使用zip函数直接秒杀,先对每一个列表进行解压缩*,然后得到多个字符串,通过zip函数把每一组字符串单个字符进行组合,然后转换为集合的形式查看这个集合的长度,如果长度为1,那么就说明这组的单个字符相同,代码如下:

class Solution(object):def longestCommonPrefix(self, strs):""":type strs: List[str]:rtype: str"""a = str()if strs:for i in zip(*strs):if len(set(i))==1:a+=i[0]else:return areturn a

4.有效的括号

 这道题也是有很简单的方法,只是不好想到。这一类括号匹配问题,总是会存在{},(),[ ]这三类括号中的一个(如果出现[)、{ ]的话那就取代不了),所以我们只需要把这三类括号进行不断的取代为空'' ,如果最后取代完成了之后这个字符串变为空的话就可以输出True,反正输出False,代码如下:

class Solution:def isValid(self, s):while '{}' in s or '()' in s or '[]' in s:s = s.replace('{}', '')s = s.replace('[]', '')s = s.replace('()', '')return s == ''

5.删除有序数组中的重复项

 我们可以去通过循环吧前一个和后面一个数字进行比较,但是有一个问题,那就是最后一个数字不知道跟谁比较,所以我们需要去添加一个字符'a'作为一个参照,这类题我们在c语言基本做到烂了,下面看代码吧:

class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""nums.append('a')k=0for i in range(len(nums)-1):if nums[i]!=nums[i+1]:nums[k]=nums[i]k+=1return k

6.移除元素

 对于这类题,做法跟上面那道题是差不多的,看代码吧:

class Solution(object):def removeElement(self, nums, val):""":type nums: List[int]:type val: int:rtype: int"""k=0for i in range(len(nums)):if nums[i]!=val:nums[k]=nums[i]k+=1return k

 7.最后一个单词的长度

class Solution(object):def lengthOfLastWord(self, s):""":type s: str:rtype: int"""count=0k=0for i in range(len(s)-1,-1,-1):if k==1:k=0if s[i]==' ':k+=1else:count+=1k=2if k==3:breakreturn count

  我们可以直接倒序去检测,当遇到空格的时候k就+1,当k=1的时候,k就回到0,就这样一直下去,直到遇到非空格的时候(此时是最后一个单词)此时k的值为0,然后count就开始计数,k就赋值为2,直到再次遇到空格的时候说明最后一个单词计数完成了,就应该结束循环,此时k=2+1=3,结束循环

8.爬楼梯 

其实这道题,最开始我也是没什么思路,但是当我往后面写了几个数字就发现规律了,也就是1,2,3,5,8,13……也就是说后面的一个等于前面的两个之和,简直就是跟斐波那契数列一样,这时候我们就可以去写代码了。 

 本质方法:你可以想象一下,在总数为n个阶梯,当你遇到最后两个阶梯或者最后一个阶梯的时候,你是可以直接一步跨过去的,好,那在此之前你是不是跨了n-1个阶梯或者n-2个阶梯呢?所以我们可以假设夸n个阶梯有f(n) 种方法,所以这不就有了 f(n)=f(n-1)+f(n-2),这不是斐波那契数列嘛!!!

class Solution(object):def climbStairs(self, n):""":type n: int:rtype: int"""a,b=1,1while n>1:a,b=b,a+bn-=1return b

 9.合并两个有序数组

 这道题非常简单,直接把num1倒数n项直接换成num2就行了,然后用sort() 函数直接排序就是了,代码如下:

class Solution(object):def merge(self, nums1, m, nums2, n):""":type nums1: List[int]:type m: int:type nums2: List[int]:type n: int:rtype: None Do not return anything, modify nums1 in-place instead."""if n!=0:nums1[-n:]=nums2nums1.sort()

10.杨辉三角

杨辉三角的规律如下所示,所以我们需要先生成numRows个列表,直接按照杨辉三角的规律去添加就行了。看代码:

 

class Solution(object):def generate(self, numRows):""":type numRows: int:rtype: List[List[int]]"""li=[[1] for i in range(numRows)]for i in range(1,numRows):for j in range(1,i):if i>1:li[i].append(li[i-1][j-1]+li[i-1][j])li[i].append(1)return li

 10.验证回文串

 思路很直接,先转换为小写,然后把里面的数字字符和字母字符提取出来就行了,最后就是正序和倒序比较,上代码:

class Solution(object):def isPalindrome(self, s):""":type s: str:rtype: bool"""st=str()s=s.lower()for i in range(len(s)):if 'a'<=s[i]<='z' or '0'<=s[i]<='9':st+=s[i]if st==st[::-1]:return Trueelse:return False

11.买卖股票的最佳时机 

这道题我们可以去依次设置最小值min和差值最大值max,当遇到比当前数字min的情况就进行赋值,当与到差值比当前max差值还大的时候进行赋值,代码如下: 

class Solution(object):def maxProfit(self, prices):""":type prices: List[int]:rtype: int"""max=0min=prices[0]for p in prices[1:]:if min>p:min=pcontinueif max

 12.多数元素

 方法很简单,我们先把这个数组进行排序,然后输出其中的中位数就行了,代码如下:

class Solution(object):def majorityElement(self, nums):""":type nums: List[int]:rtype: int"""nums.sort()return nums[int(len(nums)/2)]

 13.位1的个数

 这类题的方法是先把这个二进制数转换为十进制数,再把这个十进制数转换为字符串形式,很直接,用int() 函数把这个二进制转换为十进制,然后用bin()函数把这个十进制转换为二进制字符串形式,代码如下:

class Solution:def hammingWeight(self, n: int) -> int:n=bin(int(n,2))return n.count('1')

14. 同构字符串

 这道题也是灵活去利用zip()函数,先要去判断这两个字符串集合化以后数量是不是相同,然后通过zip函数把这两个字符串结合到一起再进行集合化,如果集合化的数量与原来的数量相同的话那么就是同构字符串。

class Solution(object):def isIsomorphic(self, s, t):""":type s: str:type t: str:rtype: bool"""if len(set(s))==len(set(t)):k=len(set(s))li=set((zip(s,t)))if len(li)==k:return Trueelse:return Falseelse:return False

15.存在重复元素 

这类题也是非常简单的,利用集合的去重功能,我们直接把原来的长度与集合化后的长度进行比较,如果相同那么就不存在重复元素,反之。代码如下:

class Solution(object):def containsDuplicate(self, nums):""":type nums: List[int]:rtype: bool"""if len(nums)==len(set(nums)):return Falsereturn True

 16.存在重复元素 II

 这道题可以利用字典的功能去解决,先去创建一个空字典,我们利用enumerate函数分别获取到这个数字的下标和数值,然后以数值为键,下标为值,加入到字典里面去,当遇到相同的键时,去判断当前的值与已在字典的值的差是否小于k,满足条件就返回True,直到整个数组都循环了一遍还没有找到的话就返回False,代码如下:

class Solution(object):def containsNearbyDuplicate(self, nums, k):""":type nums: List[int]:type k: int:rtype: bool"""di={}for i,j in enumerate(nums):if j in di and i-di[j]<=k:return Trueelse:di[j]=ireturn False

 17.搜索插入位置

 这里就要考虑到当前target是否大于这个数组的最大值或者小于最小值,还有这个数组是否为空等情况。代码如下:

class Solution(object):def searchInsert(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""if target in nums:return nums.index(target)else:for i in range(len(nums)):if targettarget and len(nums)==1:return ielif nums[i]

 18.二进制求和

 思路很简单,把二进制数转换为十进制再进行相加,然后通过bin函数转换为二进制字符串输出就行了。

class Solution(object):def addBinary(self, a, b):""":type a: str:type b: str:rtype: str"""a=int(a,2)b=int(b,2)c=a+bc=bin(c)c=c[2:]return c

19.有效的字母异位词 

 对于这道题,我们可以通过字典的键值对性质去处理(字符为键,数量为值),依次去统计这两个字符串字母出现的次数,最后去判断这两个字典是否相等就行了,代码如下:

class Solution(object):def isAnagram(self, s, t):""":type s: str:type t: str:rtype: bool"""a={}b={}for i in s:if i in a:a[i]=a.get(i,0)+1else:a[i]=0for j in t:if j in b:b[j]=b.get(j,0)+1else:b[j]=0return a==b

20.丢失的数字

 这组数字理论上是有n+1个数字的,但是又一个数字没有在里面,所以只有n个数字,我们只需要通过循环去一一匹配就行了,如果发现有数字没有在这个数组里面就返回这个数字。

class Solution(object):def missingNumber(self, nums):""":type nums: List[int]:rtype: int"""for i in range(len(nums)+1):if i not in nums:return i

 好了,以上就是今天的全部内容了,我们下一期再见!!

分享一张壁纸:

相关内容

热门资讯

中际旭创:高端光模块产品持续上... 中际旭创7月6日在互动平台表示,公司高端光模块产品在持续上量。
看这地党建引领跑出政采“加速度... 转自:中国政府采购报今年以来,广西壮族自治区钦州市政府采购中心(以下简称采购中心)坚持党建引领,以“...
广东多举措部署台风“丹娜丝”防... 来源:中国新闻网 中新网广州7月6日电 (记者 王坚)今年第4号台风“丹娜丝”6日给广东省东部沿海及...
消夏大餐、潮玩休闲……副中心推... 转自:北京日报客户端为进一步丰富文化供给、增加文旅场景,激发副中心文旅消费活力,充分彰显副中心温度,...
游戏挂机赚钱1小时2元(两三万... 现在的网络游戏交易系统极其复杂,硬币种类繁多,有类似的元宝,也有可交易的交易硬币,也有不可交易的游戏...
没人注意的暴利行业,赚钱快的路... 赚钱最快的方法就是把生意撕了。如果四条路都走不了,那就听我的,老老实实工作。你和财富唯一的关系就是没...
早浪箱好上海话什么意思? 早浪箱好上海话什么意思?上海宁讲早浪箱好,就是早上好就是早上好的意思
一举两得是什么意思 一举两得是什么意思做一件事得到两方面的好处。做一件事得到了两种收获拼音:yī jǔ liǎng dé...
有什么让你醒悟的哲学句子? 有什么让你醒悟的哲学句子?谁走进你的生命,是由命运决定;谁停留在你生命中,却是由你自己决定。 我们不...
记录的地平线轻小说完结了吗? 记录的地平线轻小说完结了吗?应该没有...第三季明年可能出