codewars(python)练习笔记一:查找二进制中“1”的个数

codewars(python)练习笔记一:查找二进制中“1”的个数

题目:

Write a function that takes an (unsigned) integer as input, and returns the number of bits that are equal to one in the binary representation of that number.

Example: The binary representation of 1234 is 10011010010, so the function should return 5 in this case

题目大意:

编写一个将(无符号)整数作为输入的函数,并返回该数字二进制表示中等于1的位数。
例如:输入1234,其二进制表示为10011010010,所以所要求实现函数的输出应该是5。

这也是一道比较经典的题目,貌似不少面试总结文章里有这样的题目。

普通方法:

#!/usr/bin/python

def countBits(n):
    count = 0
    while n > 0 :
        if(n&1) == 1:
            count = count+1
        n>>=1
    return count
    
print countBits(1234)

在codewars上的测试结果:

Time: 550ms Passed: 5 Failed: 0

这种方法是很常规的移位+计数。这种方法的运算次数与输入n最高位1的位置有关,最多循环32次。

结合python系统函数的解法:

def countBits(n):
    return len(bin(n).replace("0b","").replace("0",""))
    #一句话的事儿

在codewars上的测试结果:

Time: 574ms Passed: 5 Failed: 0

bin(n) 是python的一个系统函数,能够将n 转换为 0b110001 的二进制形式
replace("0b","")是将 0b去掉,这样就得到了n 完整的二进制表示
replace("0","")是将 二进制中的0去掉,这样就得到了生下的都是1的表示
len() 再获取其长度,就是该数字二进制表示中等于1的位数
虽然这是四个系统函数的拼接使用,但有效的减少了相应的代码行数。

下面是个从codewars找到的更短的:

def countBits(n):
    return bin(n).count("1")

python 的系统函数的正确使用,不仅能够降低代码的复杂度,也能有效的减少代码行数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,877评论 0 38
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,195评论 0 13
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,021评论 17 410
  • 这一刻,柔情似水。 我静静地仰望星光璀璨的夜空,不禁感慨世上竟会有这样精美绝伦的词句“金风玉露一相逢,便胜却人间无...
    无树非台阅读 201评论 2 2
  • 如果可以 我愿陪你 在岁月的轮回中 走过每一个春夏秋冬 我小心翼翼的编织着 想把每一个季节 变成一颗大大的爱心 渐...
    猗璘馆阅读 145评论 0 1