78. Subsets

2017-11-26  本文已影响0人  larrymusk
int count(int x){
    // 计算x的二进制位中有多少个1
    int rst;
    for(rst = 0;x;x=x&(x-1))rst++;
    return rst;
}

int** subsets(int* nums, int numsSize, int** columnSizes, int* returnSize) {
    *returnSize = 1<<numsSize; //2的N次方
    *columnSizes = (int*)malloc(*returnSize*sizeof(int));
    int**rst = (int**)malloc(*returnSize*sizeof(int*));
    int n = 1<<numsSize;
    for(int i=0;i<n;i++){
        (*columnSizes)[i] = count(i);//计算当前i的bit1的位数 
        rst[i] = (int*)malloc(sizeof(int)*(*columnSizes)[i]);//保存set其中一个组合
        int k = 0;
        for(int j = 0;j<numsSize;j++){
            if(i&(1<<j)) // 对应位为1时放入结果集
                rst[i][k++] = nums[j];//nums[0] 是[1],nums[1]是2,nums[2]是3
        }
    }
    return rst;
}
上一篇下一篇

猜你喜欢

热点阅读