目录

0191:位1的个数

力扣第 191 题

题目

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。

示例 1:

输入:n = 11
输出:3
解释:输入的二进制串 1011 中,共有 3 个设置位。

示例 2:

输入:n = 128
输出:1
解释:输入的二进制串 10000000 中,共有 1 个设置位。

示例 3:

输入:n = 2147483645
输出:30
解释:输入的二进制串 11111111111111111111111111111101 中,共有 30 个设置位。

提示:

  • 1 <= n <= 231 - 1

进阶

  • 如果多次调用这个函数,你将如何优化你的算法?

分析

#1

可以直接调包。

1
2
3
class Solution:
    def hammingWeight(self, n: int) -> int:
        return n.bit_count()

30 ms

#2

有个巧妙的位计算技巧:

  • n & (n-1) 等价于将 n 中最后一个 1 变为 0
  • 循环操作直到 n 变为 0 即可

解答

1
2
3
4
5
6
7
class Solution:
    def hammingWeight(self, n: int) -> int:
        res = 0
        while n:
            n &= n-1
            res += 1
        return res

40 ms