输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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 == null || matrix.length == 0 || matrix[0].length == 0) {
return new int[0];
}
int i = 0;
int j = 0;
int current_position = 0;
int length = matrix[0].length;
int width = matrix.length;
int length1 = length * width;
int[] result = new int[0];
int[][] isOrNo = new int[width][length];//为了记录
result = new int[length1];
result[current_position++] = matrix[0][0];
isOrNo[0][0] = 1;
while(true){
while(j!=length-1 && isOrNo[i][j+1] == 0){
result[current_position++] = matrix[i][j+1];
isOrNo[i][j+1] = 1;//每一步都在标记数组中把已走过的路径标记
j++;
}
while(i!=width-1 && isOrNo[i+1][j] == 0){
result[current_position++] = matrix[i+1][j];
isOrNo[i+1][j] = 1;
i++;
}
while(j!=0 && isOrNo[i][j-1] == 0){
result[current_position++] = matrix[i][j-1];
isOrNo[i][j-1] = 1;//每一步都在标记数组中把已走过的路径标记
j--;
}
while(i!=0 && isOrNo[i-1][j] == 0){
result[current_position++] = matrix[i-1][j];
isOrNo[i-1][j] = 1;
i--;
}
if(j!=length-1 && isOrNo[i][j+1] == 0){
continue;
}else if(i!=width-1 && isOrNo[i+1][j] == 0){
continue;
}else if(j!=0 && isOrNo[i][j-1] == 0){
continue;
}else if(i!=0 && isOrNo[i-1][j] == 0){
continue;
}else{
break;
}
}
return result;
}
}