题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 10-100 <= matrix[i][j] <= 100题解
就是简单的模拟,不知道为啥这也算中等题了
嗯,如果你想耍杂技的话,也可以这样写(代码可读性极差):class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: m = len(matrix) n = len(matrix[0]) left = 0 right = n-1 low = 0 high = m-1 L = [] while True: for c in range(left, right+1): L.append(matrix[low][c]) low += 1 if low > high: break for c in range(low, high+1): L.append(matrix[c][right]) right -= 1 if left > right: break for c in range(right, left-1, -1): L.append(matrix[high][c]) high -= 1 if low > high: break for c in range(high, low-1, -1): L.append(matrix[c][left]) left += 1 if left > right: break return Lclass Solution: def spiralOrder(self, matrix): m = len(matrix) n = len(matrix[0]) dd = [[0, 1], [1, 0], [0, -1], [-1, 0]] L = [0]*(m*n) w_h = [n, m-1] x, y = (0, -1) i = 0 direct = 0 while i < m*n: for _ in range(w_h[direct % 2]): x, y = (x+dd[direct][0], y+dd[direct][1]) L[i] = matrix[x][y] i += 1 w_h[direct % 2] -= 1 direct = (direct+1) % 4 return L
