LeetCode三数之和问题中C语言return_column_sizes参数用法疑问
LeetCode 3Sum问题中return_column_sizes参数的正确用法
我正在解决LeetCode的3Sum问题,但搞不清楚return_column_sizes参数该传入什么值,导致返回结果无法被编译器识别。我知道当前只是测试用的计数结果,先想搞懂这个参数的用法,之后再写算法逻辑。我构造了三个三元组[0,1,2]、[3,4,5]、[6,7,8]测试,但编译器完全不识别我的返回结果。
LeetCode给出的函数说明:
/**
- 返回一个大小为*returnSize的数组的数组。
- 各子数组的大小通过*returnColumnSizes数组返回。
- 注意:返回的数组和*columnSizes数组都必须通过malloc分配内存,调用者会负责释放。
*/
我的测试代码如下:
int** dynamic_array_alloc(size_t N, size_t M) { int **A = (int **)malloc(N*sizeof(int *)); for (int i=0; i<N; i++) { A[i] = (int *)malloc(M*sizeof(int)); } return A; } void dynamic_array_print(int **A, size_t N, size_t M) { for (int i=0; i<N; i++) { printf("A[%d] = %p\t", i, A[i]); for (int j=0; j<M; j++) printf("%*d", 5, A[i][j]); printf("\n"); } printf("\n"); } int** threeSum( int* nums, int numsSize, int* return_size, int** return_column_sizes ) { int **result = dynamic_array_alloc(3, 3); int k=0; *return_size=3; *return_column_sizes=*result; for (int i=0; i<3; i++) for (int j=0; j<3; j++) result[i][j]=k++; dynamic_array_print(result, 3, 3); return result; }
问题出在哪里?
你对return_column_sizes的理解完全错了。这个参数需要你malloc一个int类型的数组,数组的长度等于*return_size(也就是你返回的二维数组的行数),数组里的每个元素对应二维数组中对应子数组的长度。
在你的测试场景里,每个子数组都是3个元素,所以需要:
- 给
*return_column_sizes分配一块能存3个int的内存 - 把数组里的每个元素都设为3
修正后的threeSum函数代码
int** threeSum( int* nums, int numsSize, int* return_size, int** return_column_sizes ) { int **result = dynamic_array_alloc(3, 3); int k=0; *return_size = 3; // 正确分配return_column_sizes的内存 *return_column_sizes = (int*)malloc(*return_size * sizeof(int)); // 给每个子数组的长度赋值为3 for (int i = 0; i < *return_size; i++) { (*return_column_sizes)[i] = 3; } for (int i=0; i<3; i++) for (int j=0; j<3; j++) result[i][j]=k++; dynamic_array_print(result, 3, 3); return result; }
这样修改后,编译器就能正确识别你返回的二维数组结构了。
内容的提问来源于stack exchange,提问作者user13313191
相关产品推荐
相关产品推荐

