题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
leetcode:顺时针打印矩阵
解题思路
顺时针从外到里打印,每一圈都从该圈的左上角开始。可知每一圈打印都有相似的处理步骤,不同点是新的一圈开始时的坐标不同,同时调转打印方向的条件也有相应变化。
定义打印一圈的四个方向:
一般情况下打印一圈分为四步:
- 从左到右打印一行
- 从上到下打印一列
- 从右到左打印一行
- 从下到上打印一列
每一圈的打印都从该圈的左上角开始。
当打印逐渐收缩,最后一圈可能退化成只有一行,只有一列,或者只有一个数字。此时需要判断打印该方向时应满足的条件。
此时打印一圈:
因为打印一圈最少有一步(该圈的左上角位置元素),所以第一步不可少。
由下图可知,需要第二步的前提条件是圈内至少有一行两列,即终止行号大于起始行号。
需要第三步的前提条件是圈内至少有两行两列,即终止行号大于起始行号并且终止列号大于起始列号。如下图
需要第四步的前提条件是至少含有三行两列,即终止行号比起始行号至少大 2 ,同时终止列号大于起始列号。
代码图解分析
总图解
各圈打印顺序
代码
public int[