您的位置:首页 > Web前端

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

2017-09-17 08:04 211 查看

剑指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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: