给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** generateMatrix(int n, int* returnSize, int** returnColumnSizes){
int **ret=(int *)malloc(sizeof(int*)*n);
*returnColumnSizes=(int *)malloc(sizeof(int)*n);
*returnSize=n;
for(int i=0;i<n;++i)
{
ret[i]=(int *)malloc(sizeof(int)*n);
(*returnColumnSizes)[i]=n;
}
int gap_max=(n+1)/2;
int start=1;
for(int gap=0;gap<gap_max;gap++)
{
int end=n-gap-1;
for(int i=gap;i<=end;i++)
{
ret[gap][i]=start++;
}
if(end!=gap)
{
for(int i=gap+1;i<end;i++)
{
ret[i][end]=start++;
}
for(int i=end;i>=gap;i--)
{
ret[end][i]=start++;
}
for(int i=end-1;i>gap;i--)
{
ret[i][gap]=start++;
}
}
}
return ret;
}
执行用时 : 8 ms, 在Spiral Matrix II的C提交中击败了97.85% 的用户
内存消耗 : 7.5 MB, 在Spiral Matrix II的C提交中击败了23.08% 的用户