class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        d = [(0,1),(1,0),(0,-1),(-1,0)]
        cur_d = 0
        width = len(matrix[0])
        height = len(matrix)
        m, n = width, height - 1
        cur_m, cur_n = 0,0
        cur_p = (0,0)
        rlt = []
        for i in range(width * height):
            # print(cur_p, m, n, cur_m, cur_n)
            row = cur_p[0]
            col = cur_p[1]
            rlt.append(matrix[row][col])
            if cur_d % 2 == 0:
                cur_m += 1
                if cur_m == m:
                    m -= 1
                    cur_d += 1
                    cur_d %= 4    
                    cur_m = 0           
            else:
                cur_n += 1
                if cur_n == n:
                    n -= 1
                    cur_d += 1
                    cur_d %= 4
                    cur_n = 0
            cur_p = (row + d[cur_d][0], col+d[cur_d][1])
            
        return rlt