leetcode 78. Subsets C语言

使用了位运算

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

猜你喜欢

转载自blog.csdn.net/sinat_37372543/article/details/89076097