题解 | #螺旋矩阵#
螺旋矩阵
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)。