78. Subsets
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
网友评论