|
|
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;
}

京公网安备 11010502036488号