2024年5月23日
虽然叫刷题,但是一天只做了两道题,我吐血……
首先回顾上次没搞懂的“长度最小的子数组”问题,对应leetcode第209题。不赘述了,自己研究吧……就是折腾了很久,缝缝补补的。
螺旋矩阵问题,这个一上手确实没有思路,因为我忘记Python的matrix可以用双下标[i][j]表示其中的元素了。对应59题和54题。
看了讲解学会的59题,然后自己墨迹了一阵做出来了54题。
59题看答案憋出来的代码
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
mat=[[0]*n for _ in range(n)]
startx,starty=0,0
offset=1
step=n//2
count=1
i,j=0,0
for st in range(step):
while j < (n-offset):
mat[startx][j]=count
count+=1
j+=1
while i < (n-offset):
mat[i][j]=count
count+=1
i+=1
while j > (offset-1):
mat[i][j]=count
count+=1
j-=1
while i > (offset-1):
mat[i][j]=count
count+=1
i-=1
offset+=1
startx,starty=startx+1,starty+1
i,j=i+1,j+1
if n%2 != 0:
mat[i][j]=count
return mat
54题自己思考憋出来的代码。两题有点区别,一个是方阵,另一个是m*n矩阵。另外,m和n谁大谁小,在最后转完圈补充剩下的元素的时候,处理的细节也不同。
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
lst=[]
startx,starty=0,0
i,j=0,0
offset=1
m=len(matrix)
n=len(matrix[0])
for st in range(min(m,n)//2):
while j<(n-offset):
lst.append(matrix[i][j])
j+=1
while i<(m-offset):
lst.append(matrix[i][j])
i+=1
while j >(offset-1):
lst.append(matrix[i][j])
j-=1
while i >(offset-1):
lst.append(matrix[i][j])
i-=1
i+=1;j+=1;startx+=1;starty+=1;offset+=1
if min(m,n)==1:
for i in range(m):
for j in range(n):
lst.append(matrix[i][j])
elif min(m,n)%2 !=0:
if min(m,n)==m:
while j <=(n-offset):
lst.append(matrix[i][j])
j+=1
elif min(m,n)==n:
while i <=(m-offset):
lst.append(matrix[i][j])
i+=1
return lst
看到这里的朋友,若有更好的思路,欢迎多多指教~~~
2024年5月24日
还是补习一下链表部分的知识吧。大一上C语言课的时候是学过的,有些忘了。
链表中,每个节点包含data数据域和next指针域,data数据域存放该节点对应的数据,next指针域指向链表中下一个节点的引用指针