Given numRows, generate the first numRows of Pascal’s triangle.
For example, given numRows = 5,
Return
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
/*************************************************************************
> File Name: pascal.c
> Author: Mandagod
> Blog: http://blog.csdn.net/mandagod
> Mail: manda2003@163.com
> Created Time: 2016年07月09日 星期六 22时52分46秒
************************************************************************/
#include<stdio.h>
/**
* Return an array of arrays.
* The sizes of the arrays are returned as *columnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** generate(int numRows, int** columnSizes) {
*columnSizes = (int*)malloc(sizeof(int) * numRows);
int** res = (int**)malloc(sizeof(int*) * numRows);
int i, j;
for (i = 0; i < numRows; i++) {
(*columnSizes)[i] = i+1;
res[i] = (int*)malloc(sizeof(int) * (i + 1));
res[i][0] = res[i][i] = 1;
for(j = 1; j < i; j++)
res[i][j] = res[i - 1][j - 1] + res[i - 1][j];
}
return res;
}
int test(int numRows) {
printf("numRows: %d\n", numRows);
int i, j, k;
int*len;
int** a = generate(numRows, &len);
for (j = 0; j < numRows; j++) {
printf("row%d:%d length", j, len[j]);
printf("[");
for(k = 0; k < j + 1; k++) {
printf(" %d", a[j][k]);
}
printf(" ]\n");
}
for(i = 0; i < numRows; i++)
free(a[i]);
free(a);
printf("\n");
return 0;
}
int main() {
int i;
for (i = 0; i < 6; i++) {
test(i);
}
return 0;
}
// run results
numRows: 0
numRows: 1
row0:1 length[ 1 ]
numRows: 2
row0:1 length[ 1 ]
row1:2 length[ 1 1 ]
numRows: 3
row0:1 length[ 1 ]
row1:2 length[ 1 1 ]
row2:3 length[ 1 2 1 ]
numRows: 4
row0:1 length[ 1 ]
row1:2 length[ 1 1 ]
row2:3 length[ 1 2 1 ]
row3:4 length[ 1 3 3 1 ]
numRows: 5
row0:1 length[ 1 ]
row1:2 length[ 1 1 ]
row2:3 length[ 1 2 1 ]
row3:4 length[ 1 3 3 1 ]
row4:5 length[ 1 4 6 4 1 ]