aboutsummaryrefslogtreecommitdiff
path: root/Computer_Science/leetcode/15-3_sum.c
blob: cb6087374af689e1d16263fa9e7426df1bc46d78 (plain)
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;
}