class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0){
return new int[]{};
}
int c0 = 0;
int c1 = matrix[0].length-1;
int r0 = 0;
int r1 = matrix.length-1;
int[] res = new int[matrix.length*matrix[0].length];
int index= 0;
//算需要打印多少轮
int times = (Math.min(c1+1,r1+1))%2 == 0 ? (Math.min(c1+1,r1+1))/2 :(Math.min(c1+1,r1+1))/2+1;
for(int i = 0; i<times; i++){
for(int j = c0; j <= c1; j++) res[index++]=matrix[r0][j];
for(int j = r0+1; j <= r1; j++) res[index++]=matrix[j][c1];
//最主要是这里,只剩最后一行或者是最后一列的时候,不能重复上面打印一遍了下面再打印一边。
if((r0==r1) || (c0==c1)){ break;}
for(int j = c1-1; j >= c0; j--) res[index++]=matrix[r1][j];
//这里j>r0,并不能等于r0,因为第一个元素就是从r0开始打印的,如果此时再等于的话,就重复了
for(int j = r1-1; j > r0; j--) res[index++]=matrix[j][c0];
c0++;
c1--;
r0++;
r1--;
}
return res;
}
}