leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)

118.Pascal’s Triangle(杨辉三角)

题目给我们一个整数numRows表示杨辉三角形的行数,返回杨辉三角形的前numRows行,下面给出一个杨辉三角形看看它有哪些规律;
leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)_第1张图片
leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)_第2张图片
可以看出杨辉三角形的每一行的最左侧和最右侧的值都为1.
leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)_第3张图片
其余的第i行的第j个元素p[i][j]可以由下图确定:
leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)_第4张图片
可以看出p[i][j] = p[i-1][j]+p[i-1][j-1],有了上述的思路我们可以写出代码如下:

int** generate(int numRows, int* returnSize, int** returnColumnSizes) {
    int **p = (int **)malloc(sizeof(int **)*numRows);
    p[0] = (int *)malloc(sizeof(int*));
    p[0][0] = 1;
    *returnSize = numRows;
    *returnColumnSizes = (int *)malloc(sizeof(int)*numRows);
    (*returnColumnSizes)[0] = 1;
    for(int i=1; i<numRows;i++){
        (*returnColumnSizes)[i] = i+1;
        p[i] = (int *)malloc(sizeof(int)*(i+1));
        for(int j=0;j<=i;j++){
            if(j-1<0){
                p[i][j] = p[i-1][j]+0;
            }else if(j>i-1){
                p[i][j] = p[i-1][j-1]+0;
            }else{
                p[i][j] = p[i-1][j-1]+p[i-1][j];
            }
            
        }
    }
    return p;
}

运行结果截图:
leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)_第5张图片

119.Pascal’s Triangle II( 杨辉三角 II)

这道题要求返回杨辉三角形的第rowIndex行的值,杨辉三角形从第0行开始。有了上述的生成杨辉三角形的代码,我们只需要将杨辉三角的第i行的所有元素复制到x中,然后返回x即可,整体思路不变。

int* getRow(int rowIndex, int* returnSize) {
    int **p = (int **)malloc(sizeof(int **)*(rowIndex+1));
    int *x = (int *)malloc(sizeof(int)*(rowIndex+1));
    p[0] = (int *)malloc(sizeof(int));
    p[0][0] = 1;
    *returnSize = rowIndex+1;
    for(int i=1; i<=rowIndex;i++){
        p[i] = (int *)malloc(sizeof(int)*(i+1));
        for(int j=0;j<=i;j++){
            if(j-1<0){
                p[i][j] = p[i-1][j]+0;
            }else if(j>i-1){
                p[i][j] = p[i-1][j-1]+0;
            }else{
                p[i][j] = p[i-1][j-1]+p[i-1][j];
            }
            
        }
    }
    
    for(int i=0;i<rowIndex+1;i++){
        x[i] = p[rowIndex][i];
    }
    return x;
}

运行结果截图:
leetcode刷题日记:118.Pascal‘s Triangle(杨辉三角)_第6张图片
这一道题也可以采用我在杨辉三角这篇文章中的思路,因为根据二项式定理,可以求出杨辉三角形每一行的值。

你可能感兴趣的:(leetcode刷题日记,leetcode,算法,职场和发展)