美文网首页lintcode
365. 二进制中有多少个1

365. 二进制中有多少个1

作者: 和蔼的zhxing | 来源:发表于2017-11-15 22:34 被阅读7次

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

    比如:给定5,返回2。

    思路一:遍历每一位,如果是1,计数器加1即可,也是最容易想到的,需要遍历一次,可以用不断除2来做,也可以用位操作,后者更简单些:

       int countOnes(int num) {
            int res=0;
            for(int i=0;i<32;i++)   //移位逐步操作
            {
                if((num>>i)&1)
                {
                    res++;
                }
            }
            return res;
            // write your code here
        }
    

    思路二:这也是题目中要求尽量每次只要把1找出来就行了,不要遍历那么多。
    这个主要是要找到一个规律,规律就是n&(n-1)就能减少n的一个1,比7&6=(0111)&(0110)=(0110),9&8=(1001)&(1000)=(1000) ,从二进制的角度来看的话,n相当于在n-1的最低位加上1,所以取位与的话就可以达到这个效果,code:

    int countOnes(int num) {
            int res=0;
            while(num!=0)
            {
                num&=num-1;
                res++;
            }
            return res;
        }
    

    over

    相关文章

      网友评论

        本文标题:365. 二进制中有多少个1

        本文链接:https://www.haomeiwen.com/subject/fyqkvxtx.html