面试题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]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
注意:本题与主站 54 题相同:https://leetcode-cn.com/problems/spiral-matrix/
题解:模拟
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0) return new int[0];
int n =matrix.length,m=matrix[0].length;
int[] ans = new int[n*m];
int index=0;
for(int i=0,j=0;i<=n/2&&j<=m/2;i++,j++){
int row=i;
int col=j-1;
while(col<m-i-1) ans[index++] = matrix[row][++col];
if(ans[n*m-1]!=0) break;
while(row<n-i-1) ans[index++] = matrix[++row][col];
if(ans[n*m-1]!=0) break;
while(col>j) ans[index++] = matrix[row][--col];
if(ans[n*m-1]!=0) break;
while(row>i+1) ans[index++] = matrix[--row][col];
if(ans[n*m-1]!=0) break;
}
return ans;
}
}