顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例  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]

限制:
        0  <=  matrix.length  <=  100
        0  <=  matrix[i].length  <=  100

自我解答

        自外向内螺旋遍历,很简单,直接模拟过程就行了。
        1、如果设置i,j  变量,大脑中模拟过程会发现,这是  i  和  j  交替变化的过程,
            所以,应该是在一个循环内,分别进行两个循环的过程。
        2、另外,还会发现,i  和  j  的变化规律是  增增,减减,增增,减减,增增,减减…
              所以设置变量进行交替切换
        3、还有,i  和  j  的变化的上下左右边界点,是变化的,所以,也需要设置变量

        提交后,一遍过了。我的逻辑思维能力真的提高了。
        小小心得:大脑模拟过程,从宏到微,先把握整体寻找规律很重要

class Solution:
    def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix:
            return matrix
        i = j = 0
        min_i, max_i, min_j, max_j = -1, len(matrix), -1, len(matrix[0])
        op, res = 1, []
        while min_i < i < max_i and min_j < j < max_j:
            while min_j < j < max_j:
                res.append(matrix[i][j])
                j += op
            j -= op
            i += op
            while min_i < i < max_i:
                res.append(matrix[i][j])
                i += op
            i -= op
            j -= op
            if op == 1:
                max_j -= 1
                min_i += 1
            else:
                min_j += 1
                max_i -= 1
            op = -op
        return res

https://leetcode.cn/problems/spiral-matrix/description/