剑指offer--(13)二进制中1的个数

来源:互联网 发布:天刀薛无泪捏脸数据 编辑:程序博客网 时间:2024/06/04 09:18

剑指offer–(13)二进制中1的个数

问题描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

思路描述
利用”与”操作,不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0,这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有M个1,那么这个方法只需要循环k次即可,所以其时间复杂度O(M),eg: 111&110 =110 消除了111最右边的1。

代码实现:

public class Solution {    public int NumberOf1(int n) {         int num=0;         while(n!=0){             n=n&(n-1);//消除最右边的1             num++;         }         return num;    }}
原创粉丝点击