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]
.
Subscribe to see which companies asked this question
class Solution(object):
def handleMatrix(self, matrix,istart,jstart):
if len(self.result) == self.i_len * self.j_len:
return
for j in range(jstart, self.j_len-jstart):
self.result.append(matrix[istart][j])
if len(self.result) == self.i_len * self.j_len:
return
for i in range(istart + 1, self.i_len-istart):
self.result.append(matrix[i][self.j_len - jstart - 1])
if len(self.result) == self.i_len * self.j_len:
return
for j in range(jstart, self.j_len - jstart - 1)[::-1]:
self.result.append(matrix[self.i_len-istart-1][j])
if len(self.result) == self.i_len * self.j_len:
return
for i in range(istart + 1, self.i_len - istart - 1)[::-1]:
self.result.append(matrix[i][jstart])
self.handleMatrix(matrix,istart + 1,jstart + 1)
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
self.result = []
self.i_len = len(matrix)
if self.i_len > 0:
self.j_len = len(matrix[0])
else:
self.j_len = 0
self.handleMatrix(matrix,0,0)
return self.result
代码丑陋,另外leetcode的运行时间根本不准:一次击败8%,另一次80%