LeetCode刷题之35,38,53,58,66收获汇总

35、给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        for i in range(len(nums)):
            if nums[i]==target:
                return i
        for i in range(len(nums)-1):
            if nums[i]<target and nums[i+1]>target:
                return i+1
        if nums[-1]<target:
            return len(nums)
        if nums[0]>target:
            return 0

这道题逻辑比较简单,主要是要考虑到几种情况,最后两种情况是一开始没想到的。

38、报数(截图很好用哈哈哈)


 这道题刚看到没有什么头绪,然后查了别人写的代码,知道了用到了递归的思想,通过重新定义一个countStr函数来获得每次的新的字符串 
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        ans='1'
        while n>1:
            ans=self.countStr(ans)
            n-=1
        return ans
    
    def countStr(self,s):
        count=0
        ans=""
        tmp=s[0]
        for i in range(len(s)):
            if s[i]==tmp:
                count+=1
            else:
                ans+=str(count)+tmp
                tmp=s[i]
                count=1
        ans+=str(count)+tmp
        return ans

53、最大子序和(给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        current=nums[0]
        m=current
        for i in range(1,len(nums)):
            if current<0:
                current=0
            current+=nums[i]
            m=max(m,current)
        return m
 
 如果一个子序列当前为正数,显然它和后面的值相加会使后面的序列变得更大,因为不需要找出这个子序列,我们可以一边遍历一边更新最大值。遍历结束最大值就出来了。但是运行遇到了问题就是该序列的第一个数为负,所以要先取出第一个数,从第二个数开始遍历,最后进行比较。
58、最后一个单词的长度( 给定一个仅包含大小写字母和空格  ' '  的字符串,返回其最后一个单词的长度。 如果不存在最后一个单词,请返回 0 。
    def lengthOfLastWord(self, s):
        """
        :type s: str
        :rtype: int
        """
        t=s.strip()
        if len(t)>0:
            word=t.split()
            return len(word[-1])
        else:
            return 0

刚开始自己写的代码真是繁琐还运行不出来,后面查到了Python中有strip函数可以去掉字符串前后的空格,就方便了很多。

66、加一(给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        s=''
        for i in digits:
            s+=str(i)
        x=int(s)+1
        l=[]
        for i in str(x):
            l.append(int(i))
        return l
刚开始把这道题想得太简单了,就直接对list进行操作,后来提交发现9,99,999这样的数返回结果都是个问题,所以用str和int来进行操作就方便了很多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值