剑指 Offer 15. 二进制中1的个数
小于 1 分钟
剑指 Offer 15. 二进制中1的个数
- 标签:位运算
- 难度:简单
题目链接
题目大意
给定一个无符号整数 n
。
要求:统计其对应二进制表达式中 1
的个数。
解题思路
1. 循环按位计算
对整数 n 的每一位进行按位与运算,并统计结果。
2. 改进位运算
利用 。这个运算刚好可以将 n 的二进制中最低位的 变为 。 比如 时,,, 。
利用这个位运算,不断的将 中最低位的 变为 ,直到 变为 即可,其变换次数就是我们要求的结果。
代码
- 循环按位计算
class Solution:
def hammingWeight(self, n: int) -> int:
ans = 0
while n:
ans += (n & 1)
n = n >> 1
return ans
- 改进位运算
class Solution:
def hammingWeight(self, n: int) -> int:
ans = 0
while n:
n &= n-1
ans += 1
return ans