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.
Solution1:
Run time complexity is O(n), constant space.
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
if(n == 0) {
return 0;
}
int count = 0;
while(n != 0) {
if((n & 1) == 1) {
count++;
}
n = n >>> 1; //unsigned right shift(强制补0)
}
return count;
}
}
Solution2:
The bitwise and of x with x − 1 differs from x only in zeroing out the least significant nonzero bit: subtracting 1 changes the rightmost string of 0s to 1s, and changes the rightmost 1 to a 0. If x originally had n bits that were 1, then after only n iterations of this operation, x will be reduced to zero.
Run time complexity is O(n), n is number of 1s, constant space.
Check Hamming Weight on Wiki: http://en.wikipedia.org/wiki/Hamming_weightpublic class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
if(n == 0) {
return 0;
}
int count = 0;
while(n != 0) {
n = (n & (n - 1));
count++;
}
return count;
}
}
No comments:
Post a Comment