比较快的是,a&(a-1)
class Solution {
public:
vector<int> countBits(int num) {
vector<int> ans;
ans.push_back(0);
for(int i=1;i<=num;i++){
int a = i;
int sum = 1;
int b = a&(a-1);
while( b != 0){
//printf("<%d %d>\n",a,a-1);
sum ++;
a = b;
b = a&(a-1);
}
ans.push_back(sum);
}
return ans;
}
};
本文介绍了一种快速计算整数二进制表示中1的位数的方法,使用位运算a&(a-1)去除最低位的1,直至所有1被移除,通过迭代过程计算出整数从0到给定数值num的所有数的二进制1的个数。
890

被折叠的 条评论
为什么被折叠?



