/** * 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; }