/**
*
* @param matrix int整型二维数组
* @param matrixRowLen int matrix数组行数
* @param matrixColLen int* matrix数组列数
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
int* spiralOrder(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) {
// write code here
int top=0,bottom=matrixRowLen-1,left=0,right=*matrixColLen-1;//上边界,下边界,左边界,右边界
int len = matrixRowLen * *matrixColLen;//计算矩阵大小
int* arr = (int*)malloc(sizeof(int)*len);//申请新数组 存放遍历的数据
if(len==0){return arr;}
int index=0;
while(top<bottom&&left<right){//不能超过边界
for(int i=left;i<right;i++){
arr[index++]=matrix[top][i];
} //从左到右
for(int i=top;i<bottom;i++){
arr[index++]=matrix[i][right];
} //从上到下
for(int i=right;i>left;i--){
arr[index++]=matrix[bottom][i];
}//从右到左
for(int i=bottom;i>top;i--){
arr[index++]=matrix[i][left];
} //从下到上
//缩圈(缩小遍历范围)
left++;top++;bottom--;right--;
}
//剩余单行或单列
if(top==bottom){//剩余单行
//直接从左到右遍历完
for(int i=left;i<=right;i++){arr[index++]=matrix[top][i];}
}else if(left==right){//剩余单列
//从上到下遍历完
for(int i=top;i<=bottom;i++){arr[index++]=matrix[i][right];}
}
*returnSize = len;
return arr;
}
// [1,2,3]
// [4,5,6]
// [7,8,9]