美文网首页
78. Subsets

78. Subsets

作者: larrymusk | 来源:发表于2017-11-26 21:23 被阅读0次
    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;
    }

    相关文章

      网友评论

          本文标题:78. Subsets

          本文链接:https://www.haomeiwen.com/subject/pjylbxtx.html