剑指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")

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM