题目描述:
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
与力扣 566. 重塑矩阵解题思路相似,具体细节可参考此篇。
题目分析:
创建一个二维数组,二维数组的行数已知,每行的列数是当前的行数,即第一行有1列,第二行有两列。每行的第一列和最后一列的值都为1,其他位置的值,例如 arr[2][1] = arr[1][0] + arr[1][1]
函数中的三个参数分别代表杨辉三角的行数,杨辉三角的行数,和杨辉三角的列数。此题目的关键是开辟二维数组空间并对其赋值。
/**
* 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** newnums = (int**)malloc(sizeof(int*)*numRows);
*returnSize = numRows;
*returnColumnSizes = (int*)malloc(sizeof(int)*numRows);
*newnums = (int*)malloc(sizeof(int));
for(int i=1; i<numRows; ++i)
{
*(newnums+i) = (int*)malloc(sizeof(int)*(i+1));
(*returnColumnSizes)[i] = i+1;
for(int j=0; j<=i; ++j)
{
if(j==0 || j==i)
{
newnums[i][j]=1;
}
else
{
newnums[i][j] = newnums[i-1][j-1] + newnums[i-1][j];
}
}
}
return newnums;
}