题目:顺时针打印矩阵
来源:Leetcode
我们分别定义上下左右边界,模拟顺时针打印即可。
每次打印时,上下左右指针分别-1,即向内收缩。当有两个指针相遇时,即此时已打印完,break即可
代码如下:
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if not matrix: return []
left, right, up, down = 0, len(matrix[0])-1, 0, len(matrix)-1
res = []
while True:
for i in range(left, right+1): res.append(matrix[up][i])
up += 1
if up > down: break
for j in range(up, down+1): res.append(matrix[j][right])
right -= 1
if left > right: break
for k in range(right, left-1, -1): res.append(matrix[down][k])
down -= 1
if up > down: break
for m in range(down, up-1, -1): res.append(matrix[m][left])
left += 1
if left > right: break
return res