在力扣算法题59.螺旋矩阵题中题目给了int* returnSize, int** returnColumnSizes
/**
* 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){
}
注释里给了三句解释:
- 返回大小为
*returnSize
的数组数组。 - 数组的大小作为
*returnColumnSizes
数组返回。 - 注意:返回的数组和
*columnSizes
数组都必须被malloced
,假设调用者调用free()
。
结合题目给的 输入和输出
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
不难理解,首先 *returnSize
指针指向的是数组的行,然后所谓的*returnColumnSizes
是数组的大小,也就是每个数组所包括的列数。
相当于把二维数组拆分成了行和列,最后按行返回。
题目59.螺旋矩阵的数组初始化代码如下:
//初始化返回的结果数组的大小
*returnSize = n; //一共会有n行
*returnColumnSizes = (int*)malloc(sizeof(int) * n); //初始化分配n
//初始化返回结果数组ans
int** nums = (int**)malloc(sizeof(int*) * n);
int i;
for(i = 0; i < n; i++) {
nums[i] = (int*)malloc(sizeof(int) * n);
(*returnColumnSizes)[i] = n;
}
首先需要申请行指针,申请指向一维数组的指针,int **nums=(int **)malloc(sizeof(int*)*n);
这句的意思是 nums是一个指向指针的指针,申请了n个int*的空间,申请的二维数组有n行;
接下来需要确定数组的列数:nums[i]=malloc(sizeof(int)*n);这个语句表示的第i行有n列,即一行有n个数。
这就把C踹了,以后用C++!!!