From 61822a51f0719b988adfcbe16e16e159c90db961 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Thu, 25 May 2023 13:46:15 -0400 Subject: [PATCH] Time: 10 ms (26.92%), Space: 6.7 MB (23.85%) - LeetHub --- 78-subsets/78-subsets.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 78-subsets/78-subsets.c diff --git a/78-subsets/78-subsets.c b/78-subsets/78-subsets.c new file mode 100644 index 0000000..be8fda6 --- /dev/null +++ b/78-subsets/78-subsets.c @@ -0,0 +1,30 @@ +/** + * Return an array of arrays of size *returnSize. + * The sizes of the arrays are returned as *returnColumnSizes array. + * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). + */ +int** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){ + int twoN = pow(2, numsSize); + int **subsets = malloc(twoN * sizeof(int *)); + *returnColumnSizes = malloc(twoN * sizeof(int)); + for (int i = 0; i < twoN; ++i) { + int iCount = i; + int *array = NULL; + int arraySize = 0; + int j = 0; + while (iCount > 0) { + if (iCount & 1) { + ++arraySize; + array = realloc(array, arraySize * sizeof(int)); + array[arraySize - 1] = nums[j]; + } + + iCount >>= 1; + ++j; + } + subsets[i] = array; + (*returnColumnSizes)[i] = arraySize; + } + *returnSize = twoN; + return subsets; +} \ No newline at end of file