一、需求
- 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数。
示例 1:
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
二、位运算
2.1 思路分析
- 该题的思路是颠倒二进制位:https://blog.csdn.net/Sruggle/article/details/113888614思路中的一个环节,即从低位到高位统计1出现的个数;
2.2 代码实现
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
for(int i = 0; i < 32; i++) {
if((n & 1) == 1) {
res++;
}
n = n >> 1;
}
return res;
}
}
2.3 复杂度分析
- 时间复杂度为O(1);
- 空间复杂度为O(1);