使用了位运算
int** subsets(int* nums, int numsSize, int** columnSizes, int* returnSize) {
int len = 1 << numsSize;
int temp[100];
*returnSize = len;
int **ret = malloc(sizeof(int*)*len);
*columnSizes = malloc(sizeof(int)*len);
int i, j, count;
int flag = 1;
for (i = 0; i < len; i++)
{
flag = 1;
count = 0;
for (j = 0; j < numsSize; j++)
{
if ((i&flag) == flag)
{
temp[count]=nums[j];
count++;
}
flag = flag << 1;
}
(*columnSizes)[i]= count;
ret[i]=malloc(sizeof(int)*count);
memcpy(ret[i],temp,sizeof(int)*count);
}
return ret;
}