返回信息流貌似leetcode原来不支持c的,后来才加入。有一类题是需要返回二维数组的,而且会传入一个二级指针表示数组的各行列数。然后我发现怎么写都过不了。。。
首先他传入一个int** columnSizes还说最后要“The sizes of the arrays are returned as *columnSizes array”,我想要是表示各行长度的话那么只需要一个数组也就是int*就能表示了啊,为什么要int**,所以我只好先malloc出int*型的指针数组,再给每个int*量malloc一个整数存储对应行的长度。但是不知道这样是不是他希望的方式。
还有最后返回的二维数组应该怎么malloc,我尝试了各行分别malloc和整体一起malloc的方法,最后都不行。。。
网上几乎没有c语言做leetcode的,所以没找到个解释。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #91059同步于 2016/4/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
有没有leetcode用c做的
chenxiansf
2016/4/15镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
比如118题,https://leetcode.com/problems/pascals-triangle/
【 在 liyi5133 的大作中提到: 】
: 没有看懂,不如给个题的链接先
因为那个 columnSizes 是外面传进来的:
int *size, **pascal;
pascal = generate(5, &size);
所以你得到的是一个 int **
他已经说了 Both returned array and *columnSizes array must be malloced,你只需要 malloc 一下 *columnSizes 即可。
传了两个参数**csize和numrows,这样看的话csize初始是一个空指针,需要手动创建二维数组,第一维是numrows,第二维看题目就是每行元素个数
csize = (int**)malloc(sizeof(int*)*numrows)
for i = 0 ... (numrows - 1)
csize[i] = (int *)malloc(sizeof(int) * (i + 1))
这里注意函数局部变量与指针动态申请的问题,都是malloc的应该没事。至于free提示说的不用管。
如果只传入int*型的参数,函数结束后会恢复现场,就白干了。
发自「贵邮」
可是columnSizes不是只要是一维数组就能记录各行长度了吗,那么为什么不能传入int*型而传入int**
【 在 Vampire (Vampire) 的大作中提到: 】
: 因为那个 columnSizes 是外面传进来的:
: int *size, **pascal;
: ...................
你这里的csize是不是题目传入的columnSizes,第一维是行数我知道,但第二维难道不是只要放一个数记录该行长度不就行了吗,为什么要分配i个
【 在 liyi5133 (Agate) 的大作中提到: 】
: 传了两个参数**csize和numrows,这样看的话csize初始是一个空指针,需要手动创建二维数组,第一维是numrows,第二维看题目就是每行元素个数
: csize = (int**)malloc(sizeof(int*)*numrows)
: ...................
是的,一维保存即可,但外面调用它之后,希望你分配出来的内存在函数结束之后还能通过这个指针访问到。
【 在 chenxiansf 的大作中提到: 】
: 可是columnSizes不是只要是一维数组就能记录各行长度了吗,那么为什么不能传入int*型而传入int**
那这么说应该在malloc一个int数组后将int**指向这个数组了,我再试试
【 在 Vampire (Vampire) 的大作中提到: 】
: 是的,一维保存即可,但外面调用它之后,希望你分配出来的内存在函数结束之后还能通过这个指针访问到。
果然如此,通过了,多谢指点!
【 在 Vampire 的大作中提到: 】
: 是的,一维保存即可,但外面调用它之后,希望你分配出来的内存在函数结束之后还能通过这个指针访问到。
: