题目
题目如下图所示。
提供的代码如下:
/**
* 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** generate(int numRows, int* returnSize, int** returnColumnSizes){
}
解题思路
这题的重点在于二级指针的理解,int **表示该数为一个二级指针,指向一个一直指针int *,这个一级指针则指向一个int类型的参数。
最终代码如下。
/**
* 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** generate(int numRows, int* returnSize, int** returnColumnSizes){
int **ret;
int i, j;
//最终结果的行数等于传入的行数
*returnSize = numRows;
//申请numRows个int空间,每个空间存该row下有多少元素
*returnColumnSizes = (int *)malloc(sizeof(int) * numRows);
//申请numRows个int *空间,每个空间指向该行下的具体元素
ret = (int **)malloc(sizeof(int *) * numRows);
for (i = 0; i < numRows; i++) {
(*returnColumnSizes)[i] = i + 1;
ret[i] = (int *)malloc(sizeof(int) * (i + 1));
ret[i][0] = ret[i][i] = 1;
}
for (i = 2; i < numRows; i++) {
for (j = 1; j < i; j++) {
ret[i][j] = ret[i - 1][j - 1] + ret[i - 1][j];
}
}
return ret;
}