美文网首页技术干货
《剑指offer》之Python二进制中1的个数

《剑指offer》之Python二进制中1的个数

作者: a295ff153449 | 来源:发表于2020-01-17 15:19 被阅读0次

    二进制中1的个数
    题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
    解题思路:
    如果一个整数不为0,那么这个整数至少有一位是1。
    如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。
    其余所有位将不会受到影响。

    参考代码实现:

    class Solution:
        def NumberOf(self,n):
            if n < 0:
                print('负整数n==', n)
                n = n&0xffffffff
                print('负整数n==', n)
                print('负整数的二进制转换 n==', bin(n))
                # return n
            print('正整数n==', n)
            print('该数二进制==',bin(n))
            print('该数二进制中1的个数==',bin(n).count("1"))
            # return bin(n) ##bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
            return bin(n).count("1")
    
        #正整数的二进制
        def PositiveInteger(self,numer):
            a = bin(numer)
            print('正整数二进制 a== ', a)
            return a
    
        #负整数的二进制
        def NegativeInteger(self,number):
            a = bin(number)
            print('负整数二进制 a== ',a)
            return a
    
        def NumberOf1(self,n):
            count = 0
            if n < 0:
                n = n & 0xffffffff
                count = 0
            while n != 0:
                n = n&(n - 1)
                count += 1
            print('该整数二进制中包含的1的个数为count == ',count)
            return count
    
    solu = Solution()
    solu.NumberOf(-2)
    solu.PositiveInteger(-3)
    solu.NegativeInteger(3)
    solu.NumberOf1(2)
    

    打印结果参考:

    负整数n== -2
    负整数n== 4294967294
    负整数的二进制转换 n== 0b11111111111111111111111111111110
    正整数n== 4294967294
    该数二进制== 0b11111111111111111111111111111110
    该数二进制中1的个数== 31
    正整数二进制 a==  -0b11
    负整数二进制 a==  0b11
    该整数二进制中包含的1的个数为count ==  1
    

    相关文章

      网友评论

        本文标题:《剑指offer》之Python二进制中1的个数

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