普通法1
2
3
4
5
6
7
8int countBinary1(int num) {
int sum = 0;
while (num) {
sum += num % 2;
num /= 2;
}
return sum;
}
移位法1
2
3
4
5
6
7
8int countBinary2(int num) {
int sum = 0;
while (num) {
sum += num & 1;
num >>= 1;
}
return sum;
}
快速法
这个效率是与1的个数有关,超级牛逼!1
2
3
4
5
6
7
8int countBinary3(int num) {
int sum = 0;
while (num) {
num &= (num - 1);
sum++;
}
return sum;
}
还有以空间换取时间的方法,列出一个很大是数组,直接返回, 时间复杂度是O(1).
参考文章