【leetcode系列】【算法】【中等】螺旋矩阵

题目:

题目链接:https://leetcode-cn.com/problems/spiral-matrix/

 

解题思路:

记录当前的循环次数,每循环一次,修改一下当前的状态

根据当前的不同状态,进行不同的处理遍历方式,并将已处理的数字删除

这样循环完成一圈之后,内圈的循环方式,和外圈就相同了

持续循环到元素内的所有数字全部删除

 

我设置的状态列表如下:

0 : 获取当前第一行数字

1 : 获取所有行的最后一个数字

2 : 按照倒序获取最后一行数字

3 : 获取所有行的第一个数字

 

代码实现:

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        res = []
        state = 0
        while 0 < len(matrix):
            if state == 0:
                res += matrix[0]
                del matrix[0]
                state = 1
            elif 1 == state:
                row = 0
                while row < len(matrix):
                    if 0 == len(matrix[row]):
                        del matrix[row]
                    else:
                        res.append(matrix[row].pop())
                        row += 1
                state = 2
            elif 2 == state:
                tmp_lst = matrix[-1]
                tmp_lst.reverse()
                res += tmp_lst
                del matrix[-1]
                state = 3
            elif 3 == state:
                row = len(matrix) - 1
                while row >= 0:
                    if 0 == len(matrix[row]):
                        del matrix[row]
                    else:
                        res.append(matrix[row].pop(0))
                    
                    row -= 1
                    
                state = 0
                
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值