数组和链表刷题记录

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指针域指向链表中下一个节点的引用指针

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值