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