class Solution():
def spiralOrder(self, matrix):
if not matrix:
return []
res = []
left, right, top, bottom = 0, len(matrix[0])-1, 0, len(matrix)-1
while left<=right and top<=bottom:
for i in range(left, right+1):
res.append(matrix[top][i])
for i in range(top+1, bottom+1):
res.append(matrix[i][right])
if top<bottom:
for i in reversed(range(left+1, right)):
res.append(matrix[bottom][i])
if left<right:
for i in reversed(range(top+1, bottom+1)):
res.append(matrix[i][left])
left, right, top, bottom = left+1, right-1, top+1, bottom-1
return res
if __name__ == "__main__":
assert Solution().spiralOrder([[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]]) \
== [1, 2, 3, 6, 9, 8, 7, 4, 5]
assert Solution().spiralOrder([[2,3]]) == [2, 3]