题目要求
给定一个非负整数 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;
}