本文最后更新于:2020年11月18日 下午

q请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。因此,如果输入9,则该函数输出2。

示例1:


提示:

  • 输入必须是长度为32的二进制串。
class Solution:
	def hummingWeight(self, n):

方法一:逐位判断

  • 根据与运算定义,设二进制数字$n$,则有:

    • 若n&1=0,则n二进制最右一位为0.
    • 若n&1=1,则n二进制最右一位为1.
  • 根据以上特点,考虑以下循环判断:

    1. 判断n最右一位是否为1,根据结果计数。
    2. 将n右移一位(本题要求把数字n看作无符号数,因此使用无符号右移操作)。

    算法流程:

    1. 初始化数量统计变量$res=0$。
    2. 循环逐位判断:当$n=0$时跳出。
class Solution:
	def hammingWeight(self, n):
		res = 0
		while n:
			res += n & 1
			n >> 1
		return res

方法二:巧用n&(n-1)

class Solution:
	def hammingWeight(self, n):
		res = 0
		while n:
			res += 1
			n &= n - 1
		return res