classSolution: defspiralOrder(self, matrix: List[List[int]]) -> List[int]: ret = [] col = len(matrix[0]) row = len(matrix) visited = [[False]*col for i inrange(row)] x = 0 y = 0 direct = 'right'
whileTrue: if x >= row or y >= col or visited[x][y]: break ret.append(matrix[x][y]) visited[x][y] = True
if direct == 'right': if y == col - 1or visited[x][y+1]: direct = 'down' x += 1 else: y += 1 continue
if direct == 'down': if x == row - 1or visited[x+1][y]: direct = 'left' y -= 1 else: x += 1 continue if direct == 'left': if y == 0or visited[x][y-1]: direct = 'up' x -= 1 else: y -= 1 continue
if direct == 'up': if x == 0or visited[x-1][y]: direct = 'right' y += 1 else: x -= 1 continue