题目:
代码+思路:
思路:设立好上下左右四个边界;每走过一行或一列,边界值发生变化;
循环结束条件是左>右;上>下;
时间复杂度:O(MxN)
空间复杂度:O(1)
class Solution:
def spiralOrder(self, matrix:[[int]]) -> [int]:
# 思路:设立好上下左右四个边界;每走过一行或一列,边界值发生变化;
# 循环结束条件是左>右;上>下;
if not matrix: return []
l, r, t, b = 0, len(matrix[0]) - 1, 0, len(matrix) - 1
res = []
while True:
for i in range(l, r + 1): res.append(matrix[t][i]) # left to right
t += 1 # top + 1
if t > b: break
for i in range(t, b + 1): res.append(matrix[i][r]) # top to bottom
r -= 1
if l > r: break
for i in range(r, l - 1, -1): res.append(matrix[b][i]) # right to left
b -= 1
if t > b: break
for i in range(b, t - 1, -1): res.append(matrix[i][l]) # bottom to top
l += 1
if l > r: break
return res