题目要求
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
解题思路
关键点:把当前矩阵的上下左右边界表示出来。
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if not matrix:
return []
res = []
# 关键点:把当前矩阵的上下左右边界表示出来。
left, right, up, down = 0, len(matrix[0])-1, 0, len(matrix)-1
while left <= right and up <= down:
for i in range(right-left+1):
res.append(matrix[up][left+i])
up += 1
if up > down: break
for i in range(down-up+1):
res.append(matrix[up+i][right])
right -= 1
if left > right: break
for i in range(right-left+1):
res.append(matrix[down][right-i])
down -= 1
if up > down: break
for i in range(down-up+1):
res.append(matrix[down-i][left])
left += 1
return res