C语言 | Leetcode C语言题解之第77题组合

题目:

题解:

int** combine(int n, int k, int* returnSize, int** returnColumnSizes) {
    int* temp = malloc(sizeof(int) * (k + 1));
    int tempSize = 0;

    int** ans = malloc(sizeof(int*) * 200001);
    int ansSize = 0;

    // 初始化
    // 将 temp 中 [0, k - 1] 每个位置 i 设置为 i + 1,即 [0, k - 1] 存 [1, k]
    // 末尾加一位 n + 1 作为哨兵
    for (int i = 1; i <= k; ++i) {
        temp[i - 1] = i;
    }
    temp[k] = n + 1;

    int j = 0;
    while (j < k) {
        int* tmp = malloc(sizeof(int) * k);
        for (int i = 0; i < k; i++) {
            tmp[i] = temp[i];
        }
        ans[ansSize++] = tmp;
        j = 0;
        // 寻找第一个 temp[j] + 1 != temp[j + 1] 的位置 t
        // 我们需要把 [0, t - 1] 区间内的每个位置重置成 [1, t]
        while (j < k && temp[j] + 1 == temp[j + 1]) {
            temp[j] = j + 1;
            ++j;
        }
        // j 是第一个 temp[j] + 1 != temp[j + 1] 的位置
        ++temp[j];
    }
    *returnSize = ansSize;
    *returnColumnSizes = malloc(sizeof(int) * ansSize);
    for (int i = 0; i < ansSize; i++) {
        (*returnColumnSizes)[i] = k;
    }
    return ans;
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 16:18:14       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 16:18:14       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 16:18:14       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 16:18:14       20 阅读

热门阅读

  1. 设置docker容器时区

    2024-05-10 16:18:14       10 阅读
  2. leetcode55-Jump Game

    2024-05-10 16:18:14       10 阅读
  3. leetcode53-Maximum Subarray

    2024-05-10 16:18:14       10 阅读
  4. Gateway基础配置指南

    2024-05-10 16:18:14       9 阅读
  5. gateway基本配置

    2024-05-10 16:18:14       10 阅读
  6. 算法训练营day31

    2024-05-10 16:18:14       11 阅读
  7. 离心式冷水机组的控制逻辑

    2024-05-10 16:18:14       10 阅读
  8. SLAM 面试题

    2024-05-10 16:18:14       10 阅读
  9. AI技术:革新内容生产的效率与质量

    2024-05-10 16:18:14       11 阅读