题解 | #螺旋矩阵#
螺旋矩阵
https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
class Solution:
def spiralOrder(self , matrix: List[List[int]]) -> List[int]:
# write code here
if len(matrix) == 0:
return None
left = 0
right = len(matrix[0]) - 1
up = 0
down = len(matrix) - 1
res = []
while left <= right and up <= down:
for i in range(left, right+1):
res.append(matrix[up][i])
up += 1
if up > down:
break
for i in range(up, down+1):
res.append(matrix[i][right])
right -= 1
if right < left:
break
i = right
while i >= left:
res.append(matrix[down][i])
i -= 1
down -= 1
if up > down:
break
i = down
while i >= up:
res.append(matrix[i][left])
i -= 1
left += 1
if left > right:
break
return res
解题思路
先设置上下左右边界,并开始遍历矩阵:
- 先从左至右遍历,完成后上边界加一,并判断上下边界是否重合;
- 再从上到下遍历,完成后右边界减一,并判断左右边界是否重合;
- 再从右到左遍历,完成后下边界减一,并判断上下边界是否重合;
- 再从下到上遍历,完成后左边界加一,并判断左右边界是否重合。
复杂度
- 时间复杂度为O(mn);
- 空间复杂度为O(1)。
