这个题目会有多个解法:
需要判断n的二进制有几个1
first:通过n向右移位&1,如果n的最后为1,那么与1结果为1,(相信大家都会与运算,hashmap就是用与运算)以此来实现,循环判断有多少个1,结束条件为n=0;
second:上述方法有一个缺陷,就是当n为有符号数字时,才用n==0的结束条件会发生死循环,那么我们可以通过移位1来实现,也就是有每次比较去把1向左移,一次来比较
前两种属于常规做法,下面来说一种技巧性的做法
比如:n=1001,每次将n-1,那么第一次就是1000,使用n&(n-1)→1001&1000=1000,这是第一次计算,第二次1000&0111=0
两次运算,而1001中有两个1; 如果看不懂的可以自己写写,感受下,就能体会了;
上代码:
public void showOne(int n){
if(n==0){
System.out.println("0");
return;
}
int count=0;
while(n!=0){
count++;
n=n&(n-1);
}
System.out.println(count);
}
出处来自剑指offer