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]
.
思路:循环遍历,当遍历一边外圈的时候,把左上角坐标和左下角坐标转换为内圈的左上角和左下角,特别考虑只有一行或者一列的情况
class Solution:
# @param matrix, a list of lists of integers
# @return a list of integers
def spiralOrder(self, matrix):
if len(matrix) == 0:
return []
result = []
x1 = 0
y1 = 0
x2 = len(matrix[0]) - 1
y2 = len(matrix) - 1
while x1 <= x2 and y1 <= y2:
if x1 == x2:
for i in range(y1, y2+1):
result.append(matrix[i][x1])
break
if y1 == y2:
for i in range(x1, x2+1):
result.append(matrix[y1][i])
break
for i in range(x1, x2):
result.append(matrix[y1][i])
for i in range(y1, y2):
result.append(matrix[i][x2])
for i in range(x1+1, x2+1)[::-1]:
result.append(matrix[y2][i])
for i in range(y1+1, y2+1)[::-1]:
result.append(matrix[i][x1])
if x2 - x1 == 1 or y2 - y1 == 1:
break
x1 += 1
y1 += 1
x2 -= 1
y2 -= 1
return result