DIR = (0,1), (1,0), (0,-1), (-1,0) classSolution: defspiralOrder(self, matrix: List[List[int]]) -> List[int]: m, n = len(matrix), len(matrix[0]) size = m * n ans = [] i = 0 j = -1# 初始 j 设为 -1,方便第一步 j + 1 正确定位到 (0,0) d = 0 whilelen(ans) < size: dx, dy = DIR[d] # 根据当前方向可以行进的步数(n)进行遍历 for _ inrange(n): i += dx j += dy ans.append(matrix[i][j]) # 切换到下一个方向 d = (d + 1) % 4 # 关键:走完当前方向后,下一次交叉方向的可走空间减 1 # 例如走完横向,纵向深度 m 就减 1,并交换 n,m 的角色 n, m = m - 1, n
classSolution: defspiralOrder(self, matrix: List[List[int]]) -> List[int]: m, n = len(matrix), len(matrix[0]) size = m * n ans = [] i = 0 j = -1# 初始 j 设为 -1,方便第一步 j + 1 正确定位到 (0,0) d = 0
whilelen(ans) < size: dx, dy = DIR[d] # 根据当前方向可以行进的步数(n)进行遍历 for _ inrange(n): i += dx j += dy ans.append(matrix[i][j])
# 切换到下一个方向 d = (d + 1) % 4 # 关键:走完当前方向后,下一次交叉方向的可走空间减 1 # 例如走完横向,纵向深度 m 就减 1,并交换 n,m 的角色 n, m = m - 1, n
return ans
defmain(): data = sys.stdin.read().strip().split() m, n = int(data[0]), int(data[1]) idx = 2 matrix = [] for i inrange(m): row = list(map(int, data[idx:idx+n])) matrix.append(row) idx += n
sol = Solution() result = sol.spiralOrder(matrix) for v in result:\n print(v, end=' ')\n print()