int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
//初始化返回值
*returnSize=n;
*returnColumnSizes=(int*)malloc(sizeof(int)*n);
//初始化返回数组
int**ans=(int**)malloc(sizeof(int*)*n);
int i;
for(i=0;i<n;i++)
{
ans[i]=(int*)malloc(sizeof(int)*n);
(*returnColumnSizes)[i]=n;
}
int startx=0,starty=0;
//二维数组的中间值
int mid=n/2;//如果为奇数需要最后在中间填入值
//循环圈数
int loop=n/2;
//偏移数
int offset=1;
int count=1;//当前要添加的元素
while(loop)
{
int i=startx;
int j=starty;
//模拟上侧从左到右
for(;j<starty+n-offset;j++)
{
ans[startx][j]=count++;
}
//模拟右侧从上到下
for(;i<startx+n-offset;i++)
{
ans[i][j]=count++;
}
//模拟下侧从右到左
for(;j>starty;j--)
{
ans[i][j]=count++;
}
//模拟左侧从下到上
for(;i>startx;i--)
{
ans[i][j]=count++;
}
//控制偏移量
offset+=2;
startx++;//第二圈开始,起始位置加1
starty++;
loop--;
}
//若n为奇数需要单独给矩阵中间赋值
if(n%2)
{
ans[mid][mid]=count;
}
return ans;
}