利用上下左右对称,当遍历一圈后,向内缩小一圈,上下左右各减一行,竖
/**
- @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 col=0;
int row=0;
returnSize=matrixColLenmatrixRowLen;
int *p=(int)calloc(matrixColLenmatrixRowLen,sizeof(int));
int len=0;
while(len!=*returnSize)
{for(int i=col;i<*matrixColLen-col;i++) { p[len++]=matrix[col][i]; } if(len==*returnSize) { break; } for(int i=row+1;i<matrixRowLen-row;i++) { p[len++]=matrix[i][*matrixColLen-col-1]; } if(len==*returnSize) { break; } for(int i=*matrixColLen-col-2;i>=col;i--) { p[len++]=matrix[matrixRowLen-row-1][i]; } col++; if(len==*returnSize) { break; } for(int i=matrixRowLen-row-2;i>row;i--) { p[len++]=matrix[i][row]; } row++;
}
return p;
}