class Solution(object):
def spiralOrder(self, matrix):
ans = []
if not matrix:
return ans
#定义上下左右边界
up, down, left, right = 0, len(matrix) - 1, 0, len(matrix[0]) - 1
while True:
for i in range(left, right + 1): #[左-->右)
ans.append(matrix[up][i]) #遵循:循环不变量原则,都是先闭后开
up += 1
if up > down:
break
for i in range(up, down + 1): #[上-->下)
ans.append(matrix[i][right])
right -= 1
if right < left:
break
for i in range(right, left - 1, -1):#[右-->左)
ans.append(matrix[down][i])
down -= 1
if down < up:
break
for i in range(down, up - 1, -1): #[下-->上)
ans.append(matrix[i][left])
left += 1
if left > right:
break
return ans