题目描述
输入一个整数,输出该数二进制中表示1的个数
解题思路
利用技巧 n&(n-1),该位运算去除n的位级表示中最低的那一位。
n :10110100
n-1 :10110011
n&(n-1) :10110000
时间复杂度O(M),其中M表示1的个数。
代码
public int NumberOf1(int n) {
int cnt = 0;
while (n != 0) {
cnt++;
n &= (n - 1);
}
return cnt;
}
也可以直接使用jdk里的Integer.bitCount()
public int NumberOf1(int n) {
return Integer.bitCount(n);
}