Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit08d96b9

Browse files
authored
Merge pull requestneetcode-gh#2200 from ThBlitz/main
Create: 39-combination-sum.c
2 parents3e794fa +c17dbf6 commit08d96b9

File tree

2 files changed

+110
-1
lines changed

2 files changed

+110
-1
lines changed

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ If you would like to have collaborator permissions on the repo to merge your own
254254
<sub>Problem</sub> | <sub>C</sub> | <sub>C++</sub> | <sub>C#</sub> | <sub>Dart</sub> | <sub>GO</sub> | <sub>Java</sub> | <sub>JS</sub> | <sub>Kotlin</sub> | <sub>Python</sub> | <sub>Ruby</sub> | <sub>Rust</sub> | <sub>Scala</sub> | <sub>Swift</sub> | <sub>TS</sub>
255255
---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ----
256256
<sub>[0078 - Subsets](https://leetcode.com/problems/subsets/)</sub> | <sub><div align='center'>[✔️](c%2F0078-subsets.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0078-subsets.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0078-subsets.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0078-subsets.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0078-subsets.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0078-subsets.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0078-subsets.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0078-subsets.py)</div></sub> | <sub><div align='center'>[✔️](ruby%2F0078-subsets.rb)</div></sub> | <sub><div align='center'>[✔️](rust%2F0078-subsets.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](swift%2F0078-subsets.swift)</div></sub> | <sub><div align='center'>[✔️](typescript%2F0078-subsets.ts)</div></sub>
257-
<sub>[0039 - Combination Sum](https://leetcode.com/problems/combination-sum/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](cpp%2F0039-combination-sum.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0039-combination-sum.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0039-combination-sum.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0039-combination-sum.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0039-combination-sum.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0039-combination-sum.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0039-combination-sum.py)</div></sub> | <sub><div align='center'>[✔️](ruby%2F0039-combination-sum.rb)</div></sub> | <sub><div align='center'>[✔️](rust%2F0039-combination-sum.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0039-combination-sum.ts)</div></sub>
257+
<sub>[0039 - Combination Sum](https://leetcode.com/problems/combination-sum/)</sub> | <sub><div align='center'>[✔️](c%2F0039-combination-sum.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0039-combination-sum.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0039-combination-sum.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0039-combination-sum.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0039-combination-sum.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0039-combination-sum.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0039-combination-sum.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0039-combination-sum.py)</div></sub> | <sub><div align='center'>[✔️](ruby%2F0039-combination-sum.rb)</div></sub> | <sub><div align='center'>[✔️](rust%2F0039-combination-sum.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0039-combination-sum.ts)</div></sub>
258258
<sub>[0077 - Combinations](https://leetcode.com/problems/combinations/)</sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>[✔️](go%2F0077-combinations.go)</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>[✔️](python%2F0077-combinations.py)</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub>
259259
<sub>[0046 - Permutations](https://leetcode.com/problems/permutations/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](cpp%2F0046-permutations.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0046-permutations.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0046-permutations.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0046-permutations.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0046-permutations.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0046-permutations.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0046-permutations.py)</div></sub> | <sub><div align='center'>[✔️](ruby%2F0046-permutations.rb)</div></sub> | <sub><div align='center'>[✔️](rust%2F0046-permutations.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](swift%2F0046-permutations.swift)</div></sub> | <sub><div align='center'>[✔️](typescript%2F0046-permutations.ts)</div></sub>
260260
<sub>[0090 - Subsets II](https://leetcode.com/problems/subsets-ii/)</sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>[✔️](cpp%2F0090-subsets-ii.cpp)</div></sub> | <sub><divalign='center'>[✔️](csharp%2F0090-subsets-ii.cs)</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>[✔️](go%2F0090-subsets-ii.go)</div></sub> | <sub><divalign='center'>[✔️](java%2F0090-subsets-ii.java)</div></sub> | <sub><divalign='center'>[✔️](javascript%2F0090-subsets-ii.js)</div></sub> | <sub><divalign='center'>[✔️](kotlin%2F0090-subsets-ii.kt)</div></sub> | <sub><divalign='center'>[✔️](python%2F0090-subsets-ii.py)</div></sub> | <sub><divalign='center'>[✔️](ruby%2F0090-subsets-ii.rb)</div></sub> | <sub><divalign='center'>[✔️](rust%2F0090-subsets-ii.rs)</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>❌</div></sub> | <sub><divalign='center'>[✔️](typescript%2F0090-subsets-ii.ts)</div></sub>

‎c/0039-combination-sum.c

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
2+
/**
3+
* Return an array of arrays of size *returnSize.
4+
* The sizes of the arrays are returned as *returnColumnSizes array.
5+
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
6+
*/
7+
8+
9+
// An array with array_size to store each unique combination during backtracking.
10+
structCombination_Array {
11+
int*array;
12+
intarray_size;
13+
};
14+
15+
// A function to create a empty Combination_Array.
16+
structCombination_Array*New(intarray_size) {
17+
structCombination_Array*comb_array= (structCombination_Array*)malloc(sizeof(structCombination_Array));
18+
comb_array->array= (int*)malloc(array_size*sizeof(int));
19+
comb_array->array_size=array_size;
20+
returncomb_array;
21+
}
22+
23+
// A generic stack node with void* pointer.
24+
structStack {
25+
void*value;
26+
structStack*next;
27+
};
28+
29+
// A function to create the stack node.
30+
structStack*Node(void*value,structStack*next) {
31+
structStack*node= (structStack*)malloc(sizeof(structStack));
32+
node->value=value;
33+
node->next=next;
34+
returnnode;
35+
}
36+
37+
// append to the stack.
38+
voidappend(structStack*root,void*value) {
39+
structStack*node=Node(value,root->next);
40+
root->next=node;
41+
}
42+
43+
// pop from the stack.
44+
void*pop(structStack*root) {
45+
void*value=root->next->value;
46+
structStack*delete_node=root->next;
47+
root->next=root->next->next;
48+
free(delete_node);
49+
returnvalue;
50+
}
51+
52+
// Recursive backtracking method.
53+
intbacktrack(structStack*results,structStack*candidates_stack,intstack_size,intrunning_sum,int*candidates,intindex) {
54+
55+
if (running_sum==0) {
56+
// create a combination array.
57+
structCombination_Array*combination=New(stack_size);
58+
// copy the candidates from the candidates_stack to the combination array.
59+
structStack*node=candidates_stack;
60+
for (inti=0;i<stack_size;i++) {
61+
combination->array[i]=*(int*)node->next->value;
62+
node=node->next;
63+
}
64+
// append the combination to the results stack.
65+
append(results,combination);
66+
return1;
67+
}
68+
69+
intreturnSize=0;
70+
if (running_sum>0) {
71+
for (inti=index;i >=0;i--) {
72+
append(candidates_stack,&candidates[i]);
73+
returnSize+=backtrack(results,candidates_stack,stack_size+1,running_sum-candidates[i],candidates,i);
74+
// backtrack by poping the candidate from the candidate_stack.
75+
pop(candidates_stack);
76+
}
77+
}
78+
79+
returnreturnSize;
80+
}
81+
82+
83+
int**combinationSum(int*candidates,intcandidatesSize,inttarget,int*returnSize,int**returnColumnSizes){
84+
85+
// A candidates_stack to track all possible combinations of candidates during backtracking.
86+
structStack*candidates_stack=Node(NULL,NULL);
87+
// A results stack to store each combination solution on the stack during backtracking.
88+
structStack*results=Node(NULL,NULL);
89+
90+
// The backtracking method returns the total number of possible combinations (the final result size).
91+
*returnSize=backtrack(results,candidates_stack,0,target,candidates,candidatesSize-1);
92+
93+
// prepare the result array.
94+
int**result_array= (int**)malloc(*returnSize*sizeof(int*));
95+
*returnColumnSizes= (int*)malloc(*returnSize*sizeof(int));
96+
97+
for (inti=0;i<*returnSize;i++) {
98+
// pop() each solution from the results stack to the results array.
99+
structCombination_Array*combination= (structCombination_Array*)pop(results);
100+
result_array[i]=combination->array;
101+
returnColumnSizes[0][i]=combination->array_size;
102+
free(combination);
103+
}
104+
// finally free the results stack and the candidates stack.
105+
free(results);
106+
free(candidates_stack);
107+
returnresult_array;
108+
109+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp