题目原文:
Write a function that takes an unsigned integer and returns the number of ’1’ bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11’ has binary representation 00000000000000000000000000001011, so the function should return 3.
题目大意:
给出一个整数,求它的二进制形式里面有多少个‘1’。
题目分析:
如果n 只有1位(0或1),直接返回n,否则返回n的最后一位加上n右移一位所得数中1的个数(递归计算)。
源码:(language:c)
int hammingWeight(uint32_t n) {
return (n==0||n==1)?n:(hammingWeight(n/2)+n%2);
}
成绩:
4ms,beats3.83% 众数4ms,96.17%
Cmershen的碎碎念:
Java中有一个库函数可以水过此题:Integer.bitCount(n);
附JDK中bitCount的算法(大概是一个很巧妙的”分治算法”的位运算,复杂度O(1))
public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}