#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int **result;
int *colSize;
int resultSize;
int maxResult;
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
void backtrack(int* nums, int numsSize, int target, int start, int* path, int pathSize, int sum) {
if (sum == target) {
// 保存当前路径到结果中
int *temp
= (int*)malloc(pathSize
* sizeof(int)); memcpy(temp
, path
, pathSize
* sizeof(int)); if (resultSize >= maxResult) {
maxResult *= 2;
result
= (int**)realloc(result
, maxResult
* sizeof(int*)); colSize
= (int*)realloc(colSize
, maxResult
* sizeof(int)); }
result[resultSize] = temp;
colSize[resultSize] = pathSize;
resultSize++;
return;
}
if (sum > target) {
return;
}
for (int i = start; i < numsSize; i++) {
// 跳过重复元素
if (i > start && nums[i] == nums[i-1]) {
continue;
}
path[pathSize] = nums[i];
backtrack(nums, numsSize, target, i + 1, path, pathSize + 1, sum + nums[i]);
}
}
int main() {
int numsSize;
int *nums
= (int*)malloc(numsSize
* sizeof(int)); for (int i = 0; i < numsSize; i++) {
}
int target;
qsort(nums
, numsSize
, sizeof(int), compare
);
resultSize = 0;
maxResult = 16;
result
= (int**)malloc(maxResult
* sizeof(int*)); colSize
= (int*)malloc(maxResult
* sizeof(int));
int *path
= (int*)malloc(30 * sizeof(int)); // 假设组合长度不超过30
backtrack(nums, numsSize, target, 0, path, 0, 0);
// 输出结果
for (int i = 0; i < resultSize; i++) {
for (int j = 0; j < colSize[i]; j++) {
if (j > 0) {
}
}
}
// 释放内存
for (int i = 0; i < resultSize; i++) {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50ICoqcmVzdWx0OwppbnQgKmNvbFNpemU7CmludCByZXN1bHRTaXplOwppbnQgbWF4UmVzdWx0OwoKaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikgewogICAgcmV0dXJuICgqKGludCopYSAtICooaW50KiliKTsKfQoKdm9pZCBiYWNrdHJhY2soaW50KiBudW1zLCBpbnQgbnVtc1NpemUsIGludCB0YXJnZXQsIGludCBzdGFydCwgaW50KiBwYXRoLCBpbnQgcGF0aFNpemUsIGludCBzdW0pIHsKICAgIGlmIChzdW0gPT0gdGFyZ2V0KSB7CiAgICAgICAgLy8g5L+d5a2Y5b2T5YmN6Lev5b6E5Yiw57uT5p6c5LitCiAgICAgICAgaW50ICp0ZW1wID0gKGludCopbWFsbG9jKHBhdGhTaXplICogc2l6ZW9mKGludCkpOwogICAgICAgIG1lbWNweSh0ZW1wLCBwYXRoLCBwYXRoU2l6ZSAqIHNpemVvZihpbnQpKTsKICAgICAgICBpZiAocmVzdWx0U2l6ZSA+PSBtYXhSZXN1bHQpIHsKICAgICAgICAgICAgbWF4UmVzdWx0ICo9IDI7CiAgICAgICAgICAgIHJlc3VsdCA9IChpbnQqKilyZWFsbG9jKHJlc3VsdCwgbWF4UmVzdWx0ICogc2l6ZW9mKGludCopKTsKICAgICAgICAgICAgY29sU2l6ZSA9IChpbnQqKXJlYWxsb2MoY29sU2l6ZSwgbWF4UmVzdWx0ICogc2l6ZW9mKGludCkpOwogICAgICAgIH0KICAgICAgICByZXN1bHRbcmVzdWx0U2l6ZV0gPSB0ZW1wOwogICAgICAgIGNvbFNpemVbcmVzdWx0U2l6ZV0gPSBwYXRoU2l6ZTsKICAgICAgICByZXN1bHRTaXplKys7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHN1bSA+IHRhcmdldCkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IG51bXNTaXplOyBpKyspIHsKICAgICAgICAvLyDot7Pov4fph43lpI3lhYPntKAKICAgICAgICBpZiAoaSA+IHN0YXJ0ICYmIG51bXNbaV0gPT0gbnVtc1tpLTFdKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBwYXRoW3BhdGhTaXplXSA9IG51bXNbaV07CiAgICAgICAgYmFja3RyYWNrKG51bXMsIG51bXNTaXplLCB0YXJnZXQsIGkgKyAxLCBwYXRoLCBwYXRoU2l6ZSArIDEsIHN1bSArIG51bXNbaV0pOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGludCBudW1zU2l6ZTsKICAgIHNjYW5mKCIlZCIsICZudW1zU2l6ZSk7CiAgICBpbnQgKm51bXMgPSAoaW50KiltYWxsb2MobnVtc1NpemUgKiBzaXplb2YoaW50KSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bXNTaXplOyBpKyspIHsKICAgICAgICBzY2FuZigiJWQiLCAmbnVtc1tpXSk7CiAgICB9CiAgICBpbnQgdGFyZ2V0OwogICAgc2NhbmYoIiVkIiwgJnRhcmdldCk7CgogICAgcXNvcnQobnVtcywgbnVtc1NpemUsIHNpemVvZihpbnQpLCBjb21wYXJlKTsKCiAgICByZXN1bHRTaXplID0gMDsKICAgIG1heFJlc3VsdCA9IDE2OwogICAgcmVzdWx0ID0gKGludCoqKW1hbGxvYyhtYXhSZXN1bHQgKiBzaXplb2YoaW50KikpOwogICAgY29sU2l6ZSA9IChpbnQqKW1hbGxvYyhtYXhSZXN1bHQgKiBzaXplb2YoaW50KSk7CgogICAgaW50ICpwYXRoID0gKGludCopbWFsbG9jKDMwICogc2l6ZW9mKGludCkpOyAvLyDlgYforr7nu4TlkIjplb/luqbkuI3otoXov4czMAoKICAgIGJhY2t0cmFjayhudW1zLCBudW1zU2l6ZSwgdGFyZ2V0LCAwLCBwYXRoLCAwLCAwKTsKCiAgICAvLyDovpPlh7rnu5PmnpwKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0U2l6ZTsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCJbIik7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xTaXplW2ldOyBqKyspIHsKICAgICAgICAgICAgaWYgKGogPiAwKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIiwiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGYoIiVkIiwgcmVzdWx0W2ldW2pdKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJdXG4iKTsKICAgIH0KCiAgICAvLyDph4rmlL7lhoXlrZgKICAgIGZyZWUocGF0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdFNpemU7IGkrKykgewogICAgICAgIGZyZWUocmVzdWx0W2ldKTsKICAgIH0KICAgIGZyZWUocmVzdWx0KTsKICAgIGZyZWUoY29sU2l6ZSk7CiAgICBmcmVlKG51bXMpOwoKICAgIHJldHVybiAwOwp9