输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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为必须使用的空间)。