题目
解释:给定一个矩阵,按照螺旋的方式读取矩阵中的元素,由内而外。
基本思路
程序逻辑分为4个状态
1. 0表示向右边读取
2. 1表示向下读取
3. 2表示向左读取
4. 3表示向上读取
仅仅用状态还不够,因为要从最外圈向内读取,所以还需要四个指针:
1. up表示外圈的上行位置
2. down表示外圈的下行位置
3. left表示外圈的左列位置
4. right表示外圈的右列位置
代码
class Solution:
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if matrix == []:
return []
up = 0
down = len(matrix) - 1
left = 0
right = len(matrix[0]) - 1
# 0: go right 1: go down 2: go left 3: go up
direct = 0
# 存放结果的列表
res = []
while True:
if direct == 0:
for i in range(left,right+1):
res.append(matrix[up][i])
up += 1
if direct == 1:
for i in range(up,down+1):
res.append(matrix[i][right])
right -= 1
if direct == 2:
for i in range(right,left-1,-1):
res.append(matrix[down][i])
down -= 1
if direct == 3:
for i in range(down,up-1,-1):
res.append(matrix[i][left])
left += 1
if left > right or up > down:
return res
direct = (direct+1) % 4
运行结果
22 / 22 test cases passed.
Status: Accepted
Runtime: 36 ms