顺时针打印矩阵

Posted gugu-da

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺时针打印矩阵相关的知识,希望对你有一定的参考价值。

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

  • 分析:从左向右、从上到下打印,画图分析,考虑边界变化以及结束条件。

    行不变,列变left-->right;列不变,行变top+1-->bottom;

    行不变,列变right-1-->left+1;列不变,行变,bottom-->top+1

    1(top,left) 2 3(top,right)
    8 9 4
    7(bottom,left) 6 5(bottom,right)
  • 解决:

    class Solution:
        def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
            if not matrix or not matrix[0]:
                return []
            res = []
            top, bottom = 0, len(matrix)-1
            left, right = 0, len(matrix[0])-1
            while left <= right and top <= bottom:
                #i:row j:column
                for j in range(left, right+1):
                    res.append(matrix[top][j])
                for i in range(top+1,bottom+1):
                    res.append(matrix[i][right])
                if left < right and top < bottom:
                    for j in range(right-1,left,-1):
                        res.append(matrix[bottom][j])
                    for i in range(bottom,top,-1):
                        res.append(matrix[i][left])
                top,bottom = top+1, bottom-1
                left,right = left+1, right-1
            return res
        #空间复杂度O(1)
        #时间复杂度O(MN)
    

以上是关于顺时针打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章

顺时针打印矩阵

剑指offer--29顺时针打印矩阵

剑指offer 19.顺时针打印矩阵

顺时针打印矩阵

剑指offer:顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵 的 详细题解