第27题 移除元素
这道题与昨天的最后一题有点类似,但是更加简单,只需pop(i)即可
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
for i in range(len(nums)-1,-1,-1):
if nums[i] == val:
nums.pop(i)
return len(nums)
第28题 搜索插入位置
数组中获得索引可以用nums.index(i),不存在可以插入排序再获得索引
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if target in nums:
return nums.index(target)
else:
nums.append(target)
nums.sort()
return nums.index(target)
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
for i in range(1, len(nums)):
nums[i]=nums[i] + max(nums[i-1],0)
return max(nums)
第58题 最后一个单词的长度
判断字符串最后一个字符是否为空,从后往前计数,还有若是字符串为空得首先return 0
class Solution:
def lengthOfLastWord(self, s: str) -> int:
k=0
if len(s) == 0:
return 0
num = len(s)-1
while s[num] == ' ' and num >= 0:
num -=1
while s[num] != ' ' and num >= 0:
num -=1
k +=1
return k
第66题 加一
其实就是让数组最后一位数加1,主要是处理9这个特殊元素,需要进1。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
k = 0
for i in range(len(digits)-1,-1,-1):
if digits[i] + 1 < 10:
digits[i] = digits[i]+1
k=0
break
else:
digits[i]=0
k=1
if k == 1:
digits.insert(0,1)
return digits
第67题 二进制求和
有两个解法,第一种用python中先转化为十进制加法,然后将结果转化为二进制即可:
class Solution:
def addBinary(self, a: str, b: str) -> str:
a, b = int(a,2), int(b,2)
c = bin(a+b)
c = c[2:]
return c
第二种则是先将两个字符串化为同等长度的,再进行对位相加,每次对应字符与进位符相加。
class Solution:
def addBinary(self, a: str, b: str) -> str:
r, k = '', 0
d = len(a)-len(b)
a = '0'*-d+a
b = '0'*d+b
for i, j in zip(a[::-1], b[::-1]):
s = int(i)+int(j)+k
r = str(s%2)+r
k=s//2
return '1' + r if k else r
第69题 求x的平方根
利用牛顿法求解平方根,当然还有更简单的方法,x**0.5
class Solution:
def mySqrt(self, x: int) -> int:
x0 = float(x)
while (x0*x0 > x):
x0 = (x0 + x/x0)//2
return int(x0)
第70题 爬楼梯
终于!终于!终于!有一道我自己会做的了,这个就是斐波那契数列,根据每次的特点去写这个数列就行。
class Solution:
def climbStairs(self, n: int) -> int:
a=2
b=3
s=0
if n <=3:
return n
else:
for i in range(n-3):
s = a+b
a=b
b=s
return s
第83题 合并两个有序数组
有两种方法,一种用python内置sort函数:
nums1[] = sorted(nums1[:m]+nums2)
另一种方法是用比较法:
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
p1=m-1
p2=n-1
p=m+n-1
nums1_copy= nums1[:m]
while p1 >=0 and p2>=0:
if nums1[p1] < nums2[p2]:
nums1[p]=nums2[p2]
p2 -=1
else:
nums1[p]=nums1[p1]
p1 -=1
p -=1
nums1[:p2+1]=nums2[:p2+1]
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
if not p or not q:
return False
if p.val != q.val:
return False
return self.isSameTree(p.right, q.right) and self.isSameTree(p.left, q.left)
另一种为迭代的方式:
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
def check(p,q):
if not p and not q:
return True
if not q or not p:
return False
if p.val != q.val:
return False
return True
deq = deque([(p,q),])
while deq:
p, q = deq.popleft()
if not check(p,q):
return False
if p:
deq.append((p.left, q.left))
deq.append((p.right, q.right))
return True
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
def v_equal(p,q):
if not p and not q: return True
if not p or not q: return False
return p.val == q.val and v_equal(p.right, q.left) and v_equal(p.left, q.right)
return v_equal(root, root)
今天刷的还不错,明天加油哦!