题目描述
【leetcode】191. 位1的个数( Number of 1 Bits )
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
进阶:
如果多次调用这个函数,你将如何优化你的算法?
第一次解答
思路1:
朴素的想法就是,挨个便利所有bits,计算个数。
思路2:
函数若会被调用多次,一个优化的方法就是,
建立一个256个元素的表,该表直接返回8bits对应的1的个数,
将输入分为若干各8bits,查询这个表就可以知道各个部分有几个1了。
思路3:
看官方题解的思路,n&(n-1)能把n最后一个"1"bits变为0。这里采用这种思路。
思路4:
别人贴出来的java中integer类的实现。看看这里的解法3
tsst case:
00000000000000000000000000001011
111111111111111111
class Solution {
public:
int hammingWeight(uint32_t n) {
// // 据说是java的integer类中的解法
// n = n - ((n >> 1) & 0x55555555);
// n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
// n = (n + (n >> 4)) & 0x0f0f0f0f;
// n = n + (n >> 8);
// n = n + (n >> 16);
// return n & 0x3f;
int count = 0;
while(n != 0){
++count;
n &= n-1;
}
return count;
}
};
结果: