//分圈方式打印矩阵,一个点代码左上,一个点代码右下,把第一圈剥离出来,然后打印,再去打印子矩阵
class Solution {
static int i = 0;
int[] res = new int[0];
public int[] spiralOrder(int[][] matrix) {
if(matrix == null || matrix.length == 0 ||matrix[0].length == 0) return res;
int m = matrix.length;
int n = matrix[0].length;
res = new int [m*n];
//左上角点坐标
int lR = 0;
int lC = 0;
int tR = m-1;
int tC = n-1;
i = 0;
while(lR <= tR && lC <= tC){
printMatrix(matrix,lR,lC,tR,tC);
lR++;
lC++;
tR--;
tC--;
}
return res;
}
//打印圈
void printMatrix(int[][] matrix,int lR,int lC,int tR,int tC){
//如果只有一行 lR == tR
if(lR == tR){
while(lC <= tC){
res[i] = matrix[lR][lC];
i++;
lC++;
}
return;
}
//如果只有一列 lC == tC
else if(lC == tC){
while(lR <= tR){
res[i++] = matrix[lR][lC];
lR++;
}
return;
}
else{
//一圈,循环打印
int curR = lR;
int CurC = lC;
//打印行,列坐标++
while(CurC != tC){
res[i] = matrix[lR][CurC];
i++;
CurC++;
}
//打印列,行坐标++
while(curR != tR){
res[i] = matrix[curR][tC];
i++;
curR++;
}
//打印行,列坐标--
while(CurC != lC){
res[i] = matrix[tR][CurC];
i++;
CurC--;
}
//打印列,行坐标--
while(curR != lR){
res[i] = matrix[curR][lC];
i++;
curR--;
}
}
}
}