数据结构与算法每日一题——杨辉三角形

杨辉三角形

题目要求

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。

解题思路

如图分析,下标列为0的与列和行相等的元素皆为1。
非1元素为左上角元素加右上角元素:

 ret[i][j] = ret[i-1][j-1] + ret[i-1][j];

在这里插入图片描述

代码

int** generate(int numRows, int* returnSize, int** returnColumnSizes){
    int** ret = malloc(sizeof(int*) * 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;
     for(int j=0; j<=i; j++){
         if(i == j){
         ret[i][j] = 1;
         }else if(i > j && j == 0){
             ret[i][j] = 1;
         }else{
             ret[i][j] = ret[i-1][j-1] + ret[i-1][j];
         }
     }
    }
     return ret;
}