杨辉三角
题目
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
原题链接
leetcode一些二维数组的参数解释
本题本身没有什么难度,是一道简单题,但是在对二维数组分配内存时,如果不熟悉很容易弄错。先对刷题时常见的二维数组的参数进行一下总结。
对于本题,函数形式如下:
int** generate(int numRows, int* returnSize, int** returnColumnSizes)
-
returnColumnSizes是一个一维数组的地址的地址。(地址即指针),return-Column-Sizes,类似于returnSize,是一个“返回值”,返回的信息是二维数组的列数。
-
returnSize中要返回的信息是二维数组的行数。
因为要对传入的参数进行读写,而非只是读取。如果传入为int,int*,函数并没有对原来的数组进行任何操作;
returnColumnSizes //是一维数组的地址的地址
* returnColumnSizes //是一维数组的地址
(* returnColumnSizes)[i] //是一维数组的i个元素
解题思路
杨辉三角每行数字个数依次递增,并且第[0][i]和[i][i]个元素都为1,利用此特性可以先更新第[0][i]和[i][i]个元素为1,接着再对中间元素进行处理,ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j],j从1开始小于i时结束,正好处理了所有中间数字。
代码如下:
int** generate(int numRows, int* returnSize, int** returnColumnSizes){
int** ans = malloc(sizeof(int*) * numRows);
*returnSize = numRows;
*returnColumnSizes = malloc(sizeof(int) * numRows);
for(int i = 0; i < numRows; ++i){
ans[i] = malloc(sizeof(int) * (i + 1));
(*returnColumnSizes)[i] = i + 1;
ans[i][0] = ans[i][i] = 1;
for(int j = 1; j < i; ++j){
ans[i][j] = ans[i - 1][j - 1] + ans[i - 1][j];
}
}
return ans;
}

浙公网安备 33010602011771号