1 """ 2 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 3 Example 1: 4 Input: 5 [ 6 [ 1, 2, 3 ], 7 [ 4, 5, 6 ], 8 [ 7, 8, 9 ] 9 ] 10 Output: [1,2,3,6,9,8,7,4,5] 11 Example 2: 12 Input: 13 [ 14 [1, 2, 3, 4], 15 [5, 6, 7, 8], 16 [9,10,11,12] 17 ] 18 Output: [1,2,3,4,8,12,11,10,9,5,6,7] 19 """ 20 class Solution: 21 def spiralOrder(self, matrix): 22 if not matrix: 23 return [] 24 res = [] 25 row_end = len(matrix)-1 26 col_end = len(matrix[0])-1 27 row_begin, col_begin = 0, 0 28 while row_begin <= row_end and col_begin <= col_end:#!!!关键 29 # 向右 30 j = col_begin 31 while j <= col_end: 32 res.append(matrix[row_begin][j]) 33 j += 1 34 row_begin += 1 35 # 向下 36 i = row_begin 37 while i <= row_end: 38 res.append(matrix[i][col_end]) 39 i += 1 40 col_end -= 1 41 if row_begin <= row_end: 42 # 向左 43 j = col_end 44 while j >= col_begin: 45 res.append(matrix[row_end][j]) 46 j -= 1 47 row_end -= 1 48 if col_begin <= col_end: 49 # 向上 50 i = row_end 51 while i >= row_begin: 52 res.append(matrix[i][col_begin]) 53 i -= 1 54 col_begin += 1 55 return res