给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
思路:
杨辉三角有第一列元素和主对角线元素全为1
第i行第j列的元素等于第i - 1行第j列和第i-1行第j-1列两个元素的和
- /**
- * 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 **ans = (int **)malloc(sizeof(int *) * numRows);
- *returnSize = numRows;
- *returnColumnSizes = malloc(sizeof(int) * numRows);//申请空间
- for(int i = 0; i < numRows; i++){
- ans[i] = malloc(sizeof(int) * (i+1));
- (*returnColumnSizes)[i] = i+1;
- }
- for(int i = 0; i < numRows; i++) //为第 0 列和主对角线上的元素赋初值1
- ans[i][0] = ans[i][i] = 1;
-
- //杨辉三角有的第i行第j列的元素等于第i - 1行第j列和第i-1行第j-1列两个元素的和
- for(int i = 1; i < numRows; i++){
- for(int j = 1; j < i; j++){
- ans[i][j] = ans[i - 1][j] + ans[i - 1][j - 1];
- }
- }
- return ans;
- }