题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题过程:
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0 || matrix[0].length==0){
return new int[]{};
}
int row = matrix.length;
int col = matrix[0].length;
int[][] flag = new int[row][col];
int s = row * col;
int[] res = new int[s];
/*
* k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
*/
int k = 1;
int i = 0, j = 0, temp=0;
for (int m = 1; m <= s; m++) {
if (k == 1) {
if (j < col && flag[i][j] == 0) {
flag[i][j] = m;
res[temp] = matrix[i][j];
temp++;
j++;
} else {
k = 2;
i++;
j--;
m--;
}
} else if (k == 2) {
if (i < row && flag[i][j] == 0) {
flag[i][j] = m;
res[temp] = matrix[i][j];
temp++;
i++;
} else {
k = 3;
i--;
j--;
m--;
}
} else if (k == 3) {
if (j >= 0 && flag[i][j] == 0) {
flag[i][j] = m;
res[temp] = matrix[i][j];
temp++;
j--;
} else {
k = 4;
i--;
j++;
m--;
}
} else if (k == 4) {
if (i >= 0 && flag[i][j] == 0) {
flag[i][j] = m;
res[temp] = matrix[i][j];
temp++;
i--;
} else {
k = 1;
i++;
j++;
m--;
}
}
}
return res;
}
}