zoukankan      html  css  js  c++  java
  • lintcode :Count 1 in Binary 二进制中有多少个1

    题目:

    二进制中有多少个1

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

    样例

    给定 32 (100000),返回 1

    给定 5 (101),返回 2

    给定 1023 (111111111),返回 9

    解题:

    Java程序:

    public class Solution {
        /**
         * @param num: an integer
         * @return: an integer, the number of ones in num
         */
        public int countOnes(int num) {
            // write your code here
            return countOnes1(num); //总耗时: 1201 ms
            // return countOnes2(num); //总耗时: 1185 ms
            // return countOnes3(num); // 总耗时: 1215 ms
        }
        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;
        }
        public int countOnes3(int num){
            int count = 0;
            while(num!=0){
                num = num & (num-1);
                count++;
            }
            return count;
        }
    };
    View Code

    上面程序中有三种方法,都来自编程之美
    第一种:

    原数除以2后,数字将减少一个0

    若余数是1则,减少一个1,记录1的个数

    若余数是0则,减少一个0,记录0的个数

    第二种:

    利用位运算

    0&1 =0

    1&1 =1

    这个32位数与0000 0001 与运算的值是1,记录1的个数

    即:count += num & 0x01

    num右移一位

    num=num>>1

    第三种:

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

    好机智的方法,时间复杂度是O(M),M是num中1的个数

    Python程序:

    class Solution:
        # @param num: an integer
        # @return: an integer, the number of ones in num
        def countOnes(self, num):
            # write your code here
            # return self.countOnes1(num) # 387 ms
            # return self.countOnes2(num) # 418 ms
            return self.countOnes3(num) # 398 ms
    
        def countOnes1(self,num):
            count = 0
            while num!=0:
                if num%2==1:
                    count+=1
                num/=2
            return count
            
        def countOnes2(self,num):
            count = 0
            while num!=0:
                count += num&0x01
                num = num>>1
            return count
        
        def countOnes3(self,num):
            count = 0
            while num!=0:
                num = num & (num-1)
                count+=1
            return count
    View Code
  • 相关阅读:
    图书 "ERP理论 方法与实践" 目录
    能为农村的家乡做些什么
    利用 wz_jsgraphics.js 画线
    在WebService中使用简单的自定义SoapHeader
    VS2005 自带的 DHTML 参考
    GridView控件 Image控件 与图片的二进制数据库存储和显示
    js 图片 拖动 复制
    [文摘20070706]国内外IT相关知名的企业或组织
    操作Word模板文件.dot 结合具体数据 生成Word文档 .doc
    Android:如何显示网络图片(转)
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4867521.html
Copyright © 2011-2022 走看看