目录
描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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) {
int m = matrix.length;
if(m == 0) return new int[]{};
int n = matrix[0].length;
int loop = m >= n ? n/2:m/2;
int startx = 0;
int starty = 0;
int offset = 1;
ArrayList<Integer> arr = new ArrayList<>(); while(loop > 0){
int i = startx;
int j = starty;
for(; j < n-offset; j++){
arr.add(matrix[i][j]);
}
for(; i < m-offset; i++){
arr.add(matrix[i][j]);
}
for(; j > starty; j--){
arr.add(matrix[i][j]);
}
for(; i > startx; i--){
arr.add(matrix[i][j]);
}
offset++;
startx++;
starty++;
loop--;
}
if(m == n && m%2==1){
arr.add(matrix[m/2][n/2]);
}
if(m > n && n%2==1){
for(int i = startx; i <= m-offset; i++){
arr.add(matrix[i][starty]);
}
}
if(m < n && m%2 == 1){
for(int j = starty; j <= n-offset; j++){
arr.add(matrix[startx][j]);
}
}
int[] res = new int[arr.size()];
for(int i = 0; i < arr.size(); i++){
res[i] = arr.get(i);
}
return res;
}
}