目录
1.杨辉三角形
给定一个非负整数
numRows
,生成「杨辉三角」的前numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** generate(int numRows, int* returnSize, int** returnColumnSizes){
int **ret = (int **)malloc(sizeof(int *) * numRows);//创建一个二维数组
*returnSize = numRows;//返回的行数
*returnColumnSizes = (int *)malloc(sizeof(int) * numRows);//创建一块空间,存放每行的列数
for(int i = 0; i < numRows; i++){
ret[i] = (int *)malloc(sizeof(int) *(i + 1));//为每行的数据开辟空间
(*returnColumnSizes)[i] = i + 1;//返回列数
for(int j = 0; j <= i; j++){
if(j == 0 || j == i){//最前面和最后面,是1,其余的用公式
ret[i][j] = 1;
}
else{
ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
}
}
}
return ret;
}
//打印杨辉三角形的数组,一个元素的值等于他头顶两个元素的和
2.杨辉三角II
给定一个非负索引
rowIndex
,返回「杨辉三角」的第rowIndex
行。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* getRow(int rowIndex, int* returnSize){
int **ret = (int **)malloc(sizeof(int *) * (rowIndex + 1));//申请i+1行
*returnSize = rowIndex + 1;//返回的列数
for(int i = 0; i < rowIndex + 1; i++){//设置杨辉三角形
ret[i] = (int *)malloc(sizeof(int) * (i + 1));
for(int j = 0; j <= i; j++){
if(j == 0 || j== i)
ret[i][j] = 1;
else
ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
}
}
return ret[rowIndex];//返回下标为i的那行的地址
}
//返回下标为i的第i行,共有i+1个数