要求:
写一个函数,以一个无符号整数为参数,返回其汉明权重。例如,‘11’的二进制表示为'00000000000000000000000000001011', 故函数应当返回3。
汉明权重:指一个字符串中非零字符的个数;对于二进制串,即其中‘1’的个数。
难度:简单
分析:
将十进制参数转换为二进制,然后计算其中1的个数即可。
“除二取余”是常见的计算方式,由于Java中没有无符号整型,故采用无符号移位代替数学运算。这也避免了传入参数为Integer.MAX_VALUE + 1,即2147483648 (10000000000000000000000000000000)时会导致的潜在错误
解决方案:
Java - 217ms
public int hammingWeight(int n) { int sum = 0; while(n != 0) { sum += n & 1; n = n >>> 1; } return sum; }
Python - 48ms
def hammingWeight(self, n): sum = 0 while(n != 0): sum += n & 1 n = n >> 1 return sum