10二进制中1的个数

来源:互联网 发布:网络投稿 编辑:程序博客网 时间:2024/04/30 07:09

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路 :按位和1做与运算,如果结果为1则计数,为0则跳过,>>为右移,但此方法不适合输入为负数

class Solution:    def NumberOf1(self, n):        # write code here        count = 0        while(n):            if n&1:                count = count + 1            n = n >> 1        return count

更为简单的方法:把一个整数减1后与原有整数做与运算,相当于把整数最右边的一个1变为了0,每循环一次减去一个1

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

类似问题:
1、用一条语句判断是否为2的次方,2的次方只有一个1,(n-1)&n后变为0
2、改变m的多少位可以得到n,将m和n异或,异或的结果不同为1,相同为0,统计异或后数字中1的个数即可

原创粉丝点击