|
0 | 1 | 2 | 3 | 4 | 5 | 6 |
0 | 1 |
|
|
|
|
|
|
1 | 1 | 1 |
|
|
|
|
|
2 | 1 | 2 | 1 |
|
|
|
|
3 | 1 | 3 | 3 | 1 |
|
|
|
4 | 1 | 4 | 6 | 4 | 1 |
|
|
5 | 1 | 5 | 10 | 10 | 5 | 1 |
|
6 | 1 | 6 | 15 | 20 | 15 | 6 | 1 |
规律就是每个数组的第一个数和最后一个数都是1,然后其他的数就是数列中该数正上方和左上方的数之和
即arr[i][j] = arr[i-1][j]+arr[i-1][j-1]。关键就是数组里面的元素又是数组怎么表示?
int** generate(int num, int* returnSize, int** returnColumnSizes ) { int**arr =(int*)malloc(sizeof(int*) * num); //指针数组,数组里是num个指向数组的指针 *returnSize = num; //返回数组的行数num *returnColumnSizes = malloc(sizeof(int*) * num); //返回数组的列数 for(int i=0; i<num; i++){ //共num行,即num个数组 arr[i] = (int*)malloc(sizeof(int) * (i+1)); //每个数组的元素个数 (*returnColumnSizes)[i] = i+1; arr[i][0] = arr[i][i] = 1; //每个数组第0列和最后一列都是1 for(int j=1; j<i; j++){ arr[i][j] = arr[i-1][j-1] + arr[i-1][j]; //中间列的元素=它左上方元素+正上方元素 } } return arr; }