题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

分析
1,把数组看成一个一个的层包围,由外向内拨开洋葱的心。
2,定义每一层最左上,最右下两个点的左边(lx,ly)(rx,ry)
3,点已经给你了,所以你把每一层的四条边遍历赋给p[i],对应我代码里的四个for循环
4,第3步结束后,把左上的点的x,y坐标都+1,右下的点的x,y坐标都-1,返回第3步
提示,遍历层的某一层中的n某一个边完成之后,如果i==num也就是数组的大小会跳出循环,之后返回p即可
代码片段
int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
if(!matrixSize){
*returnSize=0;
return NULL;
} //数组为0返回空
int num=matrixSize*(*matrixColSize);
int *p=(int *)malloc(sizeof(int)*num);
*returnSize=num;
int lx=0,ly=0,rx=matrixSize-1,ry=*matrixColSize-1;//定义点
int i=0,j;
while(i<num)
{
for(int j=ly;j<=ry;j++)
p[i++]=matrix[lx][j];
if(i==num)break;
for(int j=lx+1;j<=rx;j++)
p[i++]=matrix[j][ry];
if(i==num)break;
for(int j=ry-1;j>=ly;j--)
p[i++]=matrix[rx][j];
if(i==num)break;
for(int j=rx-1;j>lx;j--)
p[i++]=matrix[j][ly];
if(i==num)break;
lx++;
ly++;
rx--;
ry--;
}
return p;
}

总结
优快云的编辑器真的LJ,代码粘贴试了一堆方法都是错的。最后在富文本编辑器编辑了才能放进来。