leetcode 54. 螺旋矩阵 python

该博客主要介绍了如何实现矩阵的螺旋遍历。通过定义一个directions列表来表示四个方向,遍历过程中判断当前位置是否越界或已被访问,动态改变方向,直至遍历完整个矩阵。算法使用了二维列表和坐标更新来完成这一过程。
摘要由CSDN通过智能技术生成

题目描述:

 

题解:

1.逆时针的遍历顺序为:右 下 左 上,定义一个directions的list,分别对应这四个方向。如果当前方向的下一个位置到达matrix边界或者已经被访问过,则变换为下一个方向。

2.定义一个和输入matrix大小相同的flag数组,初始化为全0,记录[i,j]位置是否被访问过,dir_idx表示当前沿着directions数组中的第几个方向进行遍历,result记录结果。

3.posx posy分别表示当前位置的坐标,初始化为0,dir_idx也初始化为0,将当前[posx,posy]对应的matrix值加入result中,flag对应位置标记为1,如果沿着当前direction[dir_idx]的下一个位置不合法或者对应flag为1,则使用下一个direction,得到一个新坐标,直到flag中所有位置被标记为1.

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        directions = [[0,1],[1,0],[0,-1],[-1,0]]
        result = []
        posx = 0
        posy = 0
        rows = len(matrix)
        cols = len(matrix[0])
        flag = [[0 for i in range(cols)]for j in range(rows)]
        dir_idx = 0
        flagsum = 0
        while flagsum<rows*cols:
            result.append(matrix[posx][posy])
            flag[posx][posy] = 1
            flagsum+=1
            if posx+directions[dir_idx][0]==rows or posy+directions[dir_idx][1]==cols or flag[posx+directions[dir_idx][0]][posy+directions[dir_idx][1]]==1:
                dir_idx = (dir_idx+1)%4
            posx = posx+directions[dir_idx][0]
            posy = posy+directions[dir_idx][1]
        return result

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值