C语言数据结构代码练习day4
我写你吗
88. 合并两个有序数组
题目链接:https://leetcode-cn.com/problems/pascals-triangle/
题目说明:
给定一个非负整数 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]。
每i行的第j+1个元素由上一行的第j个元素和第j+1个元素相加,每行第一个元素和最后一个元素为1。
在c中,指针malloc的数据结构可以自由转换,但是在c++中不可以转换,强制转换编译器也会报错
int** generate(int numRows, int* returnSize, int** returnColumnSizes) {
int** ret = malloc(sizeof(int*) * numRows); //这一行c++编译器会报错
*returnSize = numRows;
*returnColumnSizes = malloc(sizeof(int) * numRows);
for (int i = 0; i < numRows; ++i) {
ret[i] = malloc(sizeof(int) * (i + 1));
(*returnColumnSizes)[i] = i + 1;
ret[i][0] = ret[i][i] = 1;
for (int j = 1; j < i; ++j) {
ret[i][j] = ret[i - 1][j] + ret[i - 1][j - 1];
}
}
return ret;
}
总结
今天第一次用malloc,非常不顺利,本地无法调试,用起来也不是很明白,先慢慢来吧。