- 螺旋矩阵 II 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
/**
* 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 maxNum = n*n;
*returnSize = n;
int ** res =(int **)malloc(sizeof(int *)*n);
*returnColumnSizes = (int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
{
res[i] = (int *)malloc(sizeof(int)*n);
memset(res[i],0,n*sizeof(int));
(*returnColumnSizes)[i]=n;
}
int directions[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右下左上
int directionIndex = 0;
int curNum = 1;
int row = 0;
int col = 0;
while(curNum<=maxNum)
{
res[row][col]=curNum;
curNum++;
int newrow = row+directions[directionIndex][0];
int newcol = col+directions[directionIndex][1];
if(newrow<0||newrow>=n||newcol<0||newcol>=n||res[newrow][newcol]!=0)
{
printf("%d",directionIndex);
directionIndex =(directionIndex+1)%4;
}
row =row+directions[directionIndex][0];
col = col+directions[directionIndex][1];
}
return res;
}
这道题呢有两点需要总结
第一点 如何在二维数组中按照上下左右的顺序进行转弯
第二点 这道题中的一些参数的使用和memset函数的使用