关闭

LintCode 二进制中有多少个1

53人阅读 评论(0) 收藏 举报

题目

计算在一个 32 位的整数的二进制表式中有多少个 1.

样例 给定32(100000),返回1

给定5(101),返回2

给定1023(111111111),返回9

分析

方法一 普通法

最容易想到的方法,通过移位加计数,一个个计算统计1的个数

public int countOnes1(int num){
        int count = 0;
        while(num!=0){
            if(num%2==1)
                count++;
            num=num/2;
        }
        return count;
    }

改进的普通法

用位操作替代方法一

public int countOnes2(int num){
        int count = 0;
        while(num!=0){
            count +=num&0x01;
            num = num>>1;
        }
        return count;
    }

方法三 快速法

这种方法速度比较快,其运算次数与输入n的大小无关,只与n中1的个数有关。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0
为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的角度讲,n相当于在n - 1的最低位加上1。举个例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右边的1(其实就是最高位的1,因为8的二进制中只有一个1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二进制表示中最右边的1(也就是最低位的1)

public int countOnes3(int num){
        int count = 0;
        while(num!=0){
            num = num & (num-1);
            count++;
        }
        return count;
    }


作者:六尺帐篷
链接:http://www.jianshu.com/p/25c75149e7a2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

32位整数的二进制表示中有多少个1

思路1:def countOnes(self, num): # write your code here if num 2147483647: ...
  • u010510962
  • u010510962
  • 2016-03-17 16:24
  • 1180

计算int 型数值在内存中二进制1的个数

今天在华为OJ上遇到这么一个题目,很简单,但是却总是得不到最好的成绩记录。因此比较了自己的程序、思路与别人的异同,发现还是有很大区别的,遂记录如下。 题目—— 输入一个int型整数,求该整数的二进...
  • linfeng24
  • linfeng24
  • 2014-06-24 23:52
  • 1930

【C语言】求一个数的二进制中 1 的个数

求一个数的二进制的1的个数
  • LX18792732127
  • LX18792732127
  • 2016-09-19 11:33
  • 1543

一个unsigned int 数的二进制表示中有多少个1

这是一道面试题可以用以下的一些方案。 第一种是很容易想到的采用循环的方式并且与1进行位与运算,具体代码如下。  1int 数的二进制表示中有多少个1?" title="求一个unsigned ...
  • wyhang0
  • wyhang0
  • 2014-08-03 11:47
  • 465

整数的二进制表达中有多少个1

【题目】给定一个32位整数n,可为0,可为正负,返回该整数二进制表达中1的个数。【代码】 public static void main(String[] args) { int a ...
  • junjunba2689
  • junjunba2689
  • 5天前 10:08
  • 32

整数的二进制表达中有多少个1

题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。 分析:这是一道很基本的考查位运算的面试题。包括微软在内的很多公司都曾采用过这道题...
  • wxx2222222
  • wxx2222222
  • 2017-07-20 22:16
  • 126

[LeetCode] Hamming Distance(二进制中有多少个1)+ Number Complement(补码)

啊,又是好久没来了! 最近又开始刷leetcode,发现题目多了不少。还是从基础开始做吧。 这里是两道关于位运算的题。 1. Hamming Distance 题目链接在此 The Ham...
  • CharlieLincy
  • CharlieLincy
  • 2017-02-16 18:35
  • 191

整数的二进制表示中有多少个1

整数的二进制表示中有多少个1
  • bbb695480667
  • bbb695480667
  • 2017-05-09 12:21
  • 142

判断一个整数的二进制位中有多少个1

判断一个整数的二进制位中有多少个1 分类: C/C++ 2010-05-18 12:59 1033人阅读 评论(4)收藏 举报 [cpp] view plaincop...
  • liu_hang_yu
  • liu_hang_yu
  • 2013-01-09 11:18
  • 1257

整数的二进制表示中有多少个1的问题

二进制的问题
  • sxiaobei
  • sxiaobei
  • 2015-07-11 01:15
  • 673
    个人资料
    • 访问:555次
    • 积分:41
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类