编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
示例 :
输入: 11
输出: 3
解释: 整数 11 的二进制表示为 00000000000000000000000000001011
示例 2:
输入: 128 输出: 1 解释: 整数 128 的二进制表示为 00000000000000000000000010000000
思路一:将数 n 右移一位,判断是否为 1 ,是则自加,不然的话继续右移,直到移了 32 次。
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int result = 0;
int i = 0;
while(i < 32){
if((n&1) == 1){
result++;
}
n >>= 1;
i++;
}
return result;
}
}
思路二:的 将 n 与 n-1 做 & 运算,此步的目的是去掉 n 末尾的 1,
n = 1 0 1 1 ,
n - 1 = 1 0 1 0,x &(x-1) = 1 0 1 0,直到 n 为 0 为止,逐渐进行 & 运算,另设一个 num 记录有多少个 1。
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int num = 0;
while(n != 0){
num++;
n&=n-1;
}
return num;
}
}