一、题设
给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
二、基本思路
设置上下左右边界,循环进行右下左上的遍历操作,同时每经历一次右下左上则更新一次边界范围。当有下边界>上边界或者右边界<左边界的时候则为全部遍历完成。
三、代码实现
def spiralOrder(self, matrix):
res = []
if not matrix:
return res
left,right = 0 , len(matrix[0])-1
up,behind = 0 , len(matrix)-1
while True:
# 右
for i in range(left,right+1):
res.append(matrix[up][i])
up += 1
if up > behind:
break
# 下
for i in range(up,behind+1):
res.append(matrix[i][right])
right -= 1
if right < left:
break
# 左
for i in range(right,left-1,-1):
res.append(matrix[behind][i])
behind -= 1
if behind < up:
break
# 右
for i in range(behind,up-1,-1):
res.append(matrix[i][left])
left += 1
if left > right:
break
return res
四、效率总结