You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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个元素,所以需要:

  1. 给*return_column_sizes分配一块能存3个int的内存
  2. 把数组里的每个元素都设为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:43:25