Solutions are many, while I prefer the most readable and clear one. The code is very easy to understand and learn.
Solution:
# T:O(m*n) S:O(1) class Solution: # @param matrix, a list of lists of integers # @return a list of integers def spiralOrder(self, matrix): result = [] if matrix == []: return result left, right, top, bottom = 0, len(matrix[0]) - 1, 0, len(matrix) - 1 while left <= right and top <= bottom: for j in xrange(left, right + 1): result.append(matrix[top][j]) for i in xrange(top + 1, bottom): result.append(matrix[i][right]) for j in reversed(xrange(left, right + 1)): if top < bottom: result.append(matrix[bottom][j]) for i in reversed(xrange(top + 1, bottom)): if left < right: result.append(matrix[i][left]) left, right, top, bottom = left + 1, right - 1, top + 1, bottom - 1 return resultRun Time: 44 ms
No comments:
Post a Comment