剑指offer 面试15题

面试15题:

题目:二进制中1的个数

题:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路一:

最佳方法:把一个整数减去1,再和原整数做“与运算”,会把该整数最右边的1变成0。那么一个整数的二进制中表示中有多少个1,就可以进行多少次这样的操作。

解题代码:

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        count=0
        if n < 0:
            n=n & 0xffffffff
        while (n):
            n=(n-1) & n
            count += 1
        return count

注意:如果该整数是负数,要把它和0xffffffff相与,消除负数的影响。

解题思路二:利用Python特性

解题代码:

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        return bin(n&0xffffffff).count("1")
原文地址:https://www.cnblogs.com/yanmk/p/9194497.html