22#include <stdlib.h>
33#include <string.h>
44
5+
56static int compare (const void * a , const void * b )
67{
78 return * (int * ) a - * (int * ) b ;
89}
910
1011static void k_sum (int * nums , int low , int high , int target , int total , int k ,
11- int * stack , int len , int * * results , int * count , int * columnSizes )
12+ int * stack , int len , int * * results , int * count , int * col_sizes )
1213{
1314 int i ;
1415 if (k == 2 ) {
@@ -23,7 +24,7 @@ static void k_sum(int *nums, int low, int high, int target, int total, int k,
2324 stack [len ++ ] = nums [high ];
2425 results [* count ] = malloc (total * sizeof (int ));
2526 memcpy (results [* count ], stack , total * sizeof (int ));
26- columnSizes [* count ] = total ;
27+ col_sizes [* count ] = total ;
2728 (* count )++ ;
2829 len -= 2 ;
2930 while (++ low < high && nums [low ] == nums [low - 1 ]) {}
@@ -34,19 +35,19 @@ static void k_sum(int *nums, int low, int high, int target, int total, int k,
3435 /* k > 2 */
3536 for (i = low ; i <= high - k + 1 ; i ++ ) {
3637 if (i > low && nums [i ] == nums [i - 1 ]) continue ;
37- stack [len ++ ] = nums [i ];
38- k_sum (nums , i + 1 , high , target - nums [i ], 4 , k - 1 , stack , len , results , count , columnSizes );
39- len -- ;
38+ stack [len ] = nums [i ];
39+ k_sum (nums , i + 1 , high , target - nums [i ], 4 , k - 1 , stack , len + 1 , results , count , col_sizes );
4040 }
4141 }
4242}
4343
4444/**
4545 * Return an array of arrays of size *returnSize.
4646 * The sizes of the arrays are returned as *returnColumnSizes array.
47- * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
47+ * Note: Both returned array and *returnColumnSizes array must be malloced, assume caller calls free().
4848 */
49- int * * fourSum (int * nums , int numsSize , int target , int * returnSize , int * * returnColumnSizes ) {
49+ int * * fourSum (int * nums , int numsSize , int target , int * returnSize , int * * returnColumnSizes )
50+ {
5051 * returnSize = 0 ;
5152 int i , j , capacity = 50000 ;
5253 int * * results = malloc (capacity * sizeof (int * ));
@@ -62,11 +63,11 @@ int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** return
6263
6364int main (void )
6465{
65- int i , count ;
66+ int i , count , target = 11 , * col_sizes ;
6667 //int nums[] = { 1, 0, -1, 0, -2, 2 };
6768 //int nums[] = { -3, -2, -1, 0, 0, 1, 2, 3 };
6869 int nums [] = { 0 , 1 , 5 , 0 , 1 , 5 , 5 , -4 };
69- int * * quadruplets = fourSum (nums , sizeof (nums ) / sizeof (* nums ), 11 , & count );
70+ int * * quadruplets = fourSum (nums , sizeof (nums ) / sizeof (* nums ), target , & count , & col_sizes );
7071 for (i = 0 ; i < count ; i ++ ) {
7172 printf ("%d %d %d %d\n" , quadruplets [i ][0 ], quadruplets [i ][1 ], quadruplets [i ][2 ], quadruplets [i ][3 ]);
7273 }
0 commit comments