杨辉三角Ⅰ
https://leetcode-cn.com/problems/pascals-triangle/
分析:
1.杨辉三角的边界为1用代码表示 ret[i][0]=ret[i][i]=1; (定义ret一个二维数组,并需对其用malloc分配存储空间)
2.每个数字等于上一行的左右两个数字之和,代码表示 ret[i][j]=ret[i-1][j]+ret[i-1][j-1]。
int** generate(int numRows, int* returnSize, int** returnColumnSizes){
int **ret=malloc(sizeof(int*)*numRows); //malloc表示对内存大小的分配,这里是指给
ret分配了numRows大小的空间,以下同理
*returnSize=numRows;
*returnColumnSizes=malloc(sizeof(int)*numRows);
for(int i=0;i<numRows;i++)
{
ret[i]=malloc(sizeof(int)*(i+1));
(*returnColumnSizes)[i]=i+1;
ret[i][0]=ret[i][i]=1; //杨辉三角边界为1
for(int j=1;j<i;j++)
{
ret[i][j]=ret[i-1][j]+ret[i-1][j-1];
}
}return ret;
}
补充
<1>returnSize是指向一个整数的指针,表示返回杨辉三角的行数 = 输入numRows。
<2>returnColumnSizes是指向一个数组的指针,数组元素为对应行的元素个数。
<3>ret是一个指针,它指向的是由指针构成的数组,每个指针都指向对应的三角的一行数;ret也是二维数组。
杨辉三角Ⅱ
https://leetcode-cn.com/problems/pascals-triangle-ii/
int* getRow(int rowIndex, int* returnSize) {
*returnSize = rowIndex + 1;
int* C[rowIndex + 1];
for (int i = 0; i <= rowIndex; ++i) {
C[i] = malloc(sizeof(int) * (i + 1));
C[i][0] = C[i][i] = 1;
for (int j = 1; j < i; ++j) {
C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
}
}
return C[rowIndex];
}
如果可以理解杨辉三角Ⅰ,这道题也并没有难点了。理解以下这个即可以了
int* C[rowIndex + 1] 表示一个二维数组 可以写成 int**C,并且注意要分配空间大小 *C=malloc(sizeof(int)*rowIndex+1)。