题目描述:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fd41c87705530d385f708a39e7c22e44.png)
思路:使用左闭右开的区间进行每次循环操作,定义一个offset变量,用它来界限每次循环的区间,进行完一圈就+1,下一次就不会到已赋值的区域。
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes)
{
*returnSize=n;
*returnColumnSizes=(int*)malloc(sizeof(int)*n);
int** nums=(int**)malloc(sizeof(int*)*n);
for(int i=0;i<n;i++)
{
nums[i]=(int*)malloc(sizeof(int)*n);
(*returnColumnSizes)[i]=n;
}
int startx = 0;
int starty = 0;
int offset = 1;
int times = 0;
int i = 0;
int j = 0;
int count = 1;
for (times = 0; times < n / 2; times++)
{
for (j = starty; j < n - offset; j++)
{
nums[startx][j] = count;
count++;
}
for (i = startx; i < n - offset; i++)
{
nums[i][j] = count;
count++;
}
for (; j > starty; j--)
{
nums[i][j] = count;
count++;
}
for (; i > startx; i--)
{
nums[i][j] = count;
count++;
}
startx++;
starty++;
offset++;
}
if (n % 2 == 1)
{
nums[n/2][n/2] = count;
}
return nums;
}