顺时针打印矩阵
原创大约 2 分钟
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
输入: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]
思考:
提示
这道题的思路并不难,主要就是通过对边界值的控制,从而控制输出顺序
从第一行开始,从左到右,到右边界开始往下,到下边界开始往左,到左边界开始往上
如此重复内旋,直到全部输出完。
题解:
class Solution {
public int[] spiralOrder(int[][] matrix) {
//判断空值
if (matrix.length == 0) return new int[0];
//左、右、上、下 索引
int l = 0, r = matrix[0].length -1, t = 0, b = matrix.length - 1, x = 0;
int[] res = new int[(r + 1) * (b + 1)];
while (true){
//横着走,横不变,纵着走,纵不变,向哪转,判断谁
//左到右
for (int i = l; i <= r; i++) res[x++] = matrix[t][i];
if (++t > b) break;
//上到下
for (int i = t; i <= b; i++) res[x++] = matrix[i][r];
if (--r < l) break;
//右到左
for (int i = r; i >= l; i--) res[x++] = matrix[b][i];
if (--b < t) break;
//下到上
for (int i = b; i >= t; i--) res[x++] = matrix[i][l];
if (++l > r) break;
}
return res;
}
}