示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7]
寻找拐点 (1)
def spiralOrder(self, matrix: List[List[int]]) -> List[int]: r, i, j, di, dj = [], 0, 0, 0, 1 if matrix != []: for _ in range(len(matrix) * len(matrix[0])): r.append(matrix[i][j]) matrix[i][j] = 0 if matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])] == 0: di, dj = dj, -di i += di j += dj return r(2)
def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix or not matrix[0]: return matrix h = len(matrix) w = len(matrix[0]) order_list = [] cnt = 0 while True: for i in range(cnt, w-cnt): order_list.append(matrix[cnt][i]) for i in range(1+cnt, h-cnt): order_list.append(matrix[i][w-1-cnt]) for i in range(1+cnt,w-cnt): order_list.append(matrix[h-1-cnt][-1-i]) for i in range(1+cnt,h-1-cnt): order_list.append(matrix[-1-i][cnt]) cnt = cnt +1 if len(order_list) >= w*h: break return order_list[0:w*h]旋转
def spiralOrder(self, matrix: List[List[int]]) -> List[int]: res = [] while matrix: res.extend(matrix.pop(0)) matrix[:] = reversed(list(zip(*matrix))) return res