算法|算法:顺时针打印矩阵

算法|算法:顺时针打印矩阵

文章图片

算法|算法:顺时针打印矩阵

【算法|算法:顺时针打印矩阵】
输入一个矩阵 , 按照从外向里以顺时针的顺序依次打印出每一个数字 。
示例

  • 输入:matrix = [[1234
    [5678
    [9101112


  • 输出:[123481211109567

限制
  • 0 <= matrix.length <= 100
  • 0 <= matrix[i
    .length <= 100
方法:按层模拟对于本题 , 我们可以按照“按层模拟”的思路去实现 , 如下图所示:

算法流程:
  • 特例终止条件:如果矩阵为空 , 直接返回空数组;
  • 确定第一层的上下左右四个起始点;
  • 初始化长度为矩阵长度的结果数组 , 并初始化一个自增值 , 用于动态赋值;
  • 逐层遍历:
    • 从左到右依次从(topleft)到(topright);
    • 从上到下依次从(top+1right)到(bottomright);
    • 如果 left < right 并且 top < bottom时 ,从右到左依次从(bottomright-1)到(bottomleft+1);
    • 如果 left < right 并且 top < bottom时 , 从下到上依次从(bottomleft)到(top+1left);
  • left 加一 , right 减一 , top 加一 , bottom 减一 , 进入下一层按上述步骤遍历;
  • 返回结果数组 。
代码如下:

复杂度分析
  • 时间复杂度:O(mn) , 其中 m 和 n 分别是输入矩阵的行数和列数 。 矩阵中的每个元素都要被访问一次 。
  • 空间复杂度:O(1) 。 除了输出数组以外 , 空间复杂度是常数 。
END好兄弟可以点赞并关注我 , 全部都是干货 。