Leetcode-191-位1的个数

Leetcode-191-Number of 1 Bits

思路:位运算

题目描述

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

1
2
3
4
5
6
7
8
9
10
11
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

方法: 按位与1

  • 这个方法比较直接。我们遍历数字的 32 位。如果某一位是 1 ,将计数器加一。
  • 重点:任何数字跟掩码1进行逻辑与运算,都可以让我们获得这个数字的最低位。当检查下一位时候,我们将掩码左移一位
1
2
3
0000 0000 0000 0000 0000 0000 0000 0001
# 左移一位
0000 0000 0000 0000 0000 0000 0000 0010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 检查二进制每一位1的个数
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count = 0;
// 初始化掩码是1
int bitmask = 1;

for (int i = 0; i < 32; i++) {
if ((n & bitmask) != 0){
count++;
}
// 每次掩码向左移动一位
bitmask <<= 1;
}
return count;
}
}

复杂度分析:

  • 时间复杂度:O(1) 。 因为本题最大数字长度是32位,所以运行时间是O(1)的。
  • 空间复杂度:O(1) 没有使用额外的空间。
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信