1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/**
* Return an array of arrays of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
void helper(int **result, int *nums, int start, int numsSize, int *tmp, int count, int *returnSize)
{
if(start >= numsSize) return;
if(count < 3) {
tmp[count] = nums[start];
helper(result, nums, start + 1, numsSize, tmp, count + 1, returnSize);
}
else if(count == 3) {
if(tmp[0] + tmp[1] + tmp[2] == 0) {
*(result + *returnSize) = malloc(sizeof(int) * 3);
**(result + *returnSize) = tmp[0];
*(*(result + *returnSize) + 1) = tmp[1];
*(*(result + *returnSize) + 2) = tmp[2];
++*returnSize;
}
helper(result, nums, start, numsSize, tmp, count - 1, returnSize);
helper(result, nums, start, numsSize, tmp, count - 2, returnSize);
}
}
int** threeSum(int* nums, int numsSize, int* returnSize) {
*returnSize = 0;
int **result = malloc(sizeof(int *) * 100);
int tmp[3];
int count = 0;
for(int i = 0; i < numsSize; i++) {
helper(result, nums, i, numsSize, tmp, 0, returnSize);
}
return result;
}
|