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]
.
按螺旋顺序读取矩阵,并把读取的数放到结果数组里~可以使用0,1,2,3四个值表示上下左右四个方向以便切换, 用up, down, left, right四个变量记录四个边界~时间复杂度是O(m*n),因为每个元素都会访问一遍~
class Solution:
# @param matrix, a list of lists of integers
# @return a list of integers
def spiralOrder(self, matrix):
if matrix is None or len(matrix) == 0: return []
dir, top, bottom, left, right = 0, 0, len(matrix) - 1, 0, len(matrix[0]) - 1
res = []
while top <= bottom and left <= right:
if dir == 0:
for i in xrange(left, right + 1):
res.append(matrix[top][i])
top += 1
elif dir == 1:
for i in xrange(top, bottom + 1):
res.append(matrix[i][right])
right -= 1
elif dir == 2:
for i in reversed(xrange(left, right + 1)):
res.append(matrix[bottom][i])
bottom -= 1
elif dir == 3:
for i in reversed(xrange(top, bottom + 1)):
res.append(matrix[i][left])
left += 1
dir = (dir + 1) % 4
return res