题目:
题目链接: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