题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:只能说这种方法真的是很牛,在二进制中,如:
n = 11011
n-1 = 11010
n&(n-1) = 11010
继续减1则为 11001
n&(n-1) = 11000
继续减1 10111
n&(n-1) = 10000
则每次会将右边的1变为0,一个计数器即可搞定
public class Solution {
public int NumberOf1(int n) {
if(n == 0) return 0;
int count = 0;
while(n != 0){
count++;
n = n&(n-1);
}
return count;
}
}