给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,
计算其二进制数中的 1 的数目并将它们作为数组返回。
示例 1:
输入: 2
输出: [0,1,1]
示例 2:
输入: 5
输出: [0,1,1,2,1,2]
/* 利用位运算的技巧,可以在一定程度上提升计算速度。
按位与运算(\&&)的一个性质是:对于任意整数 xx,令 x=x \&(x-1)x=x&(x−1),
该运算将 xx 的二进制表示的最后一个 11 变成 00。
因此,对 xx 重复该操作,直到 xx 变成 00,则操作次数即为 xx 的「一比特数」。 */
在这里插入代码片 int getnum(int num){//获得num 的比特位1的个数
int i=num;
int time=1;
while(i&i-1)
{
time++;
i=i&i-1;
}
return time;
}
int* countBits(int num, int* returnSize){
int *flag=(int *)malloc(sizeof(int)*(num+1));
for(int i=0;i<num+1;i++)
flag[i]=0;
int i=1;
while(i<=num){
flag[i]=getnum(i);
++i;
}
*returnSize=i;
return flag;
}```