一、题目
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
点击查看原题
难度级别: 简单
二、 思路
1)按位运算
由于给定的是32
位int
型数据,需要计算二进制位中所有1
的个数,可以去位移并判断每一位是否为1
,进行计数
2)数学方法
采用n &= n-1
的方式消去n
中存在的1
,原理(举例)如下:
n = 0000 0000 0000 1100
n-1 = 0000 0000 0000 1011
n & (n-1) = ``0000 0000 0000 1000
三、代码
1)按位运算
public class Solution {
public int hammingWeight(int n) {
int ans = 0;
while (n != 0) {
if ((n & 1) == 1) {
ans++;
}
n = n >>> 1;
}
return ans;
}
}
2)数学方法
public class Solution {
public int hammingWeight(int n) {
int ans = 0;
while (n != 0) {
n &= n-1;
ans++;
}
return ans;
}
}
n
为32
,时间复杂度为O(logn)
,空间复杂度为O(1)