题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
与54题螺旋矩阵题目相同
示例 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
//伪代码
//空矩阵处理
class Solution{
public int[] spiralOrder(int[][] matrix) {
//处理空矩阵
int m = marix.length;
if(m==0){
return new int[0];
}
int n = marix[0].length;
int total = m*n;
int []res = new int[m*n];
int [][]direction = new int[][]{{0,1},{1,0},{0,-1},{-1,0}};
boolean [][]marked = new boolean[m][n];
int index = 0;
int x = 0;
int row = 0;
int col = 0;
for(int i = 0;i<total;i++){
res[x++] = marix[row][col];
marked[row][col] = true;
int nextRow = row + direction[index][0];
int nextCol = col + direction[index][1];
if(nextRow<0||nextCol<0||nextRow>=m||nextCol>=n||marked[nextRow][nextCol]){
index = (index+1)%4;
}
row += direction[index][0];
col += direction[index][1];
}
return res;
}
}