题目
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.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
代码
1.递归运算,虽然leet不通过,因为时间原因
public class Solution {
// you need to treat n as an unsigned value
public static int hammingWeight(int n) {
if(n==0) return 0;
if(n==1) return 1;
int total=1;
int index=1;
while(n-total*2>=0){
total=total*2;
}
n=n-total;
index=index+hammingWeight(n);
return index;
}
2.用位运算方法
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
if(n==0) return 0;
int i=0;
while(n!=0){
n=n & (n-1);
i++;
}
return i;
}
}
/********************************
* 本文来自博客 “李博Garvin“
* 转载请标明出处:http://blog.csdn.net/buptgshengod
******************************************/