package
0.0.0-20230809123828-b071cee2968a
Repository: https://github.com/codehanhan/leetcode-go.git
Documentation: pkg.go.dev

# README

顺时针打印矩阵

1. 题目描述

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

2. 示例

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

3. 解题

  1. 设置标记数组,[下,左,上,右] -> [(1, 0), (0, -1), (-1, 0), (0, 1)] 从m[0,0]开始遍历,当遇到边界或已访问数据时,尝试按照上述标记数组循环改变方向:

    • 若改变方向后仍可访问,则继续遍历
    • 若改变方向后仍不可访问,则结束
  2. 还可采用向内收缩法,开始时设置l,r,t,b四个标志,表示四个方向的边界

    • 当打印完一一行或一列时,将对应的标志向内收缩一
    • 直到标志重合
  3. 矩阵转置法 每次打印完第一行后,将剩余的矩阵进行转置并倒置,再次打印第一行,直到矩阵不存在