191. 位1的个数
问题191 位1的个数 ★☆☆☆☆
https://leetcode-cn.com/problems/number-of-1-bits/
这个题目最简单的解法就是循环取最低位的二进制位,判断是1还是0,累加计数。需要注意的一点是,Java不支持无符号整数,右移二进制位时要做逻辑右移。
对于题目中额外提出的,如何能优化效率呢?对于整型编码具备一定认知的话,可以通过n&(n-1)来操作,每次n&(n-1)会抹掉低位的一个二进制位1,直到n变为0.
1
2
3
4
5
6
7
8
9
10
11
12
13
public int hammingWeight(int n) {
if (n == 0) {
return 0;
}
int weight = 0;
do {
weight++;
} while ((n = (n & n-1)) != 0);
return weight;
}
本文由作者按照 CC BY 4.0 进行授权