技术干货

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

2020-01-17  本文已影响0人  a295ff153449

二进制中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
上一篇下一篇

猜你喜欢

热点阅读