判断一个二进制数字有多少个1----java实现

这个题目会有多个解法:

需要判断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

你可能感兴趣的:(算法)