位1的个数
概述:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
输入:00000000000000000000000000001011
输出:3
输入:00000000000000000000000010000000
输出:1
输入:11111111111111111111111111111101
输出:31
方法一:循环+判断
思路:我们可以直接循环检查给定整数 n 的二进制位的每一位是否为 1 。
# 循环+判断
class Solution:
def hammingWeight(self, n: int) -> int:
ans = sum(1 for i in range(32) if n & (1 << i))
return ans
方法二:位运算优化
思路:我们不断让当前的 n 与 n−1 做与运算,直到 n 变为 0 即可。因为每次运算会使得 n 的最低位的 1 被翻转,因此运算次数就等于 n 的二进制位中 1 的个数。
# 位运算优化
class Solution:
def hammingWeight(self, n: int) -> int:
ans = 0
while n:
n &= n - 1
ans += 1
return ans
总结
刷题一整年,面试半余天。