Leetcode — 杨辉三角《超详解》

  • Post author:
  • Post category:其他


杨辉三角Ⅰ


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)。



版权声明:本文为weixin_58183566原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。