Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
思路:上下左右四个方向,维护四个边界的变量,还要一个direct变量,循环~~~这里要注意跳出循环的条件(其实我是瞎试出来的,哈哈哈)
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
if not matrix: return []
top = left = 0
bottom = len(matrix)-1
right = len(matrix[0])-1
res = []
direct = 0
while (top <= bottom and left <= right):
if direct == 0:
for i in range(left, right+1):
res.append(matrix[top][i])
top += 1
if direct == 1:
for i in range(top, bottom+1):
res.append(matrix[i][right])
right -= 1
if direct == 2:
for i in range(right, left-1, -1):
res.append(matrix[bottom][i])
bottom -= 1
if direct == 3:
for i in range(bottom, top-1, -1):
res.append(matrix[i][left])
left += 1
direct = (direct+1)%4
return res