本文最后更新于: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.
根据以上特点,考虑以下循环判断:
- 判断n最右一位是否为1,根据结果计数。
- 将n右移一位(本题要求把数字n看作无符号数,因此使用无符号右移操作)。
算法流程:
- 初始化数量统计变量$res=0$。
- 循环逐位判断:当$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
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!