118. 杨辉三角 - 力扣(LeetCode),
前言:平平无奇的实现,数组理清了的话就很easy,值得说的是给定的参数
int* returnSize, int** returnColumnSizes
是什么意思,还得熟悉适应,博主还是看官解的代码和参数名字和提示来理解,
博主的理解是returnSize是外部定义的存放我们要创建的杨辉三角的int整型指针数组的大小的变量,传递进来的是地址,所以是int* ;
returnColumnSizes,如其名,返回的列的大小,具体其实是每一行杨辉三角的列数(每一行有几个数)看作外部定义了一个int* 的指针,把地址传递了进来,所以是int** 我们要malloc一个数组,存放每一行的个数,
目录
题目:
思路:
代码+注释:
每日表情包:
题目:
思路:
没啥值得思考的,就像题目动画的演示一样,把二维数组的上一行的那两个数加起来就好,考验的是数组的基本,由于遍历二维数组,所以易知时O(n^2);
代码+注释:
/**
* 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* BuyMalloc(int i)
{
int* tmp = (int*)malloc(sizeof(int)* i);
assert(tmp);
return tmp;
}
int** generate(int numRows, int* returnSize, int** returnColumnSizes) {
int** r = (int**)malloc(sizeof(int*) * numRows);
*returnSize = numRows;
*returnColumnSizes = (int*)malloc(sizeof(int) * numRows);
for(int i = 1; i <= numRows; ++i){//i为第i行
r[i - 1] = BuyMalloc(i);
for(int j = 0; j < i; ++j){
if(j == 0 || j == i - 1){//确立边界(特殊)
r[i - 1][j] = 1;
}
else{//(一般情况)
r[i - 1][j] = r[i - 2][j - 1] + r[i - 2][j];
}
}
(*returnColumnSizes)[i - 1] = i;
}
return r;
}
每日表情包:
点点赞可怜可怜孩子吧!,嘤嘤嘤!