文章

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;
	}

在 LeetCode 查看

本文由作者按照 CC BY 4.0 进行授权