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、最后一个单词的长度( 给定一个仅包含大小写字母和空格
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来进行操作就方便了很多。