剑指 Offer 29. 顺时针打印矩阵
说明
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
代码实现
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
ans = []
if not matrix or not matrix[0]:
return []
l, r, t, b = 0, len(matrix[0]) - 1, 0, len(matrix) - 1
while True:
for i in range(l, r + 1):
ans.append(matrix[t][i])
t += 1
if t > b:
break
for i in range(t, b + 1):
ans.append(matrix[i][r])
r -= 1
if l > r:
break
for i in range(r, l - 1, -1):
ans.append(matrix[b][i])
b -= 1
if b < t:
break
for i in range(b, t - 1, -1):
ans.append(matrix[i][l])
l += 1
if l > r:
break
return ans