leetcode 59. 螺旋矩阵 II 中等
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
分析:模拟矩阵的生成即可。
/**
* 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 **ans=(int**)malloc(sizeof(int*)*(n*n));
for(int i=0;i<n;++i)
ans[i]=(int*)malloc(sizeof(int)*n);
*returnSize=n;
*returnColumnSizes=(int*)malloc(sizeof(int)*n);
for(int i=0;i<n;++i)
(*returnColumnSizes+i)[0]=n;
int cnt=n*n,i=0,j=0,num=1,up,down,left,right;
up=down=left=right=0;
while(num<=cnt)
{
while(j<n-right)
ans[i][j]=num,num++,j++;
j--,right++,i++;
while(i<n-up)
ans[i][j]=num,num++,i++;
i--,down++,j--;
while(j>=0+left)
ans[i][j]=num,num++,j--;
j++,left++,i--;
while(i>=0+down)
ans[i][j]=num,num++,i--;
i++,up++,j++;
}
return ans;
}