C语言 | Leetcode C语言题解之第40题组合总和II

题目:

题解:

int** ans;
int* ansColumnSizes;
int ansSize;

int* sequence;
int sequenceSize;

int** freq;
int freqSize;

void dfs(int pos, int rest) {
    if (rest == 0) {
        int* tmp = malloc(sizeof(int) * sequenceSize);
        memcpy(tmp, sequence, sizeof(int) * sequenceSize);
        ans[ansSize] = tmp;
        ansColumnSizes[ansSize++] = sequenceSize;
        return;
    }
    if (pos == freqSize || rest < freq[pos][0]) {
        return;
    }

    dfs(pos + 1, rest);

    int most = fmin(rest / freq[pos][0], freq[pos][1]);
    for (int i = 1; i <= most; ++i) {
        sequence[sequenceSize++] = freq[pos][0];
        dfs(pos + 1, rest - i * freq[pos][0]);
    }
    sequenceSize -= most;
}

int comp(const void* a, const void* b) {
    return *(int*)a - *(int*)b;
}

int** combinationSum2(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes) {
    ans = malloc(sizeof(int*) * 2001);
    ansColumnSizes = malloc(sizeof(int) * 2001);
    sequence = malloc(sizeof(int) * 2001);
    freq = malloc(sizeof(int*) * 2001);
    ansSize = sequenceSize = freqSize = 0;

    qsort(candidates, candidatesSize, sizeof(int), comp);
    for (int i = 0; i < candidatesSize; ++i) {
        if (freqSize == 0 || candidates[i] != freq[freqSize - 1][0]) {
            freq[freqSize] = malloc(sizeof(int) * 2);
            freq[freqSize][0] = candidates[i];
            freq[freqSize++][1] = 1;
        } else {
            ++freq[freqSize - 1][1];
        }
    }
    dfs(0, target);
    *returnSize = ansSize;
    *returnColumnSizes = ansColumnSizes;
    return ans;
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 04:28:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 04:28:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 04:28:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 04:28:03       20 阅读

热门阅读

  1. 上海计算机学会2022年11月月赛C++丙组T3最长平台

    2024-04-24 04:28:03       13 阅读
  2. UniApp 中的路由魔法:玩转页面导航与跳转

    2024-04-24 04:28:03       45 阅读
  3. vue ---列表渲染

    2024-04-24 04:28:03       17 阅读
  4. 19篇 vue3进阶

    2024-04-24 04:28:03       19 阅读
  5. 【LeetCode热题100】【链表】排序链表

    2024-04-24 04:28:03       47 阅读
  6. LeetCode 1378、1277、2944

    2024-04-24 04:28:03       24 阅读
  7. 大数据——Zookeeper 安装(集群)(二)

    2024-04-24 04:28:03       40 阅读
  8. 示波器文件-ISF文件-读取说明

    2024-04-24 04:28:03       18 阅读
  9. JVM(2)

    2024-04-24 04:28:03       47 阅读