Lcof29

Lcof 29. 顺时针打印矩阵

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

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

class Solution {
public int[] spiralOrder(int[][] matrix) {
if (matrix.length == 0) {
return new int[0];
}
int rows = matrix.length - 1;
int columns = matrix[0].length - 1;
int r = 0, c = 0, t = 0;
int[] res = new int[(rows + 1) * (columns + 1)];
while (true) {
for (int i = c; i <= columns; i++) {
res[t++] = matrix[r][i];
}
if (++r > rows) {
break;
}
for (int i = r; i <= rows; i++) {
res[t++] = matrix[i][columns];
}
if (--columns < c) {
break;
}
for (int i = columns; i >= c; i--) {
res[t++] = matrix[rows][i];
}
if (--rows < r) {
break;
}
for (int i = rows; i >= r; i--) {
res[t++] = matrix[i][c];
}
if (++c > columns) {
break;
}
}
return res;
}
}

复杂度分析:
时间复杂度O(MN):M,N分别为矩阵行数和列数。
空间复杂度O(1):四个边界使用常数大小的额外空间(res为必须使用的空间)。

Author: Jiayi Yang
Link: https://jiayiy.github.io/2020/07/09/Lcof29/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.