0191. 位1的个数
大约 1 分钟
0191. 位1的个数
- 标签:位运算、分治
- 难度:简单
题目链接
题目大意
描述:给定一个无符号整数 。
要求:统计其对应二进制表达式中 的个数。
说明:
- 输入必须是长度为 的二进制串。
示例:
- 示例 1:
输入:n = 00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
- 示例 2:
输入:n = 00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
解题思路
思路 1:循环按位计算
- 对整数 的每一位进行按位与运算,并统计结果。
思路 1:代码
class Solution:
def hammingWeight(self, n: int) -> int:
ans = 0
while n:
ans += (n & 1)
n = n >> 1
return ans
思路 1:复杂度分析
- 时间复杂度:,其中 是二进位的位数,。
- 空间复杂度:。
思路 2:改进位运算
利用 n & (n - 1)
。这个运算刚好可以将 的二进制中最低位的 变为 。
比如 时,,,110 & 101 = 100
。
利用这个位运算,不断的将 中最低位的 变为 ,直到 变为 即可,其变换次数就是我们要求的结果。
思路 2:代码
class Solution:
def hammingWeight(self, n: int) -> int:
ans = 0
while n:
n = n & (n - 1)
ans += 1
return ans
思路 2:复杂度分析
- 时间复杂度:。
- 空间复杂度:。