uacs2024

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

leetcode191-位1的个数

1.循环检查二进制位

把题目给出的数不断对2取余,余数为1则计数

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int count=0;
        while(n)
        {
            if(n%2==1)  count++;  //还可以直接化简为count+=(n%2);
            n /= 2;  
        }
        return count;
    }
};
也可以对32位的每一位数分别判断是否为1

for (int i = 0; i < 32; i++)

{
  if (n & (1 << i))  //相当于2^i

  {
    count++;
  }
}

这两种本质上都是一种方法,即循环检查二进制位

2.位运算优化

运算:n&(n - 1),其运算结果恰为把 的二进制位中的最低位的 变为 0 之后的结果

每次运算会使得 n 的最低位的 1 被翻转,因此运算次数就等于 n 的二进制位中 1 的个数。可以节省很多不必要的运算

class Solution {
public:
int hammingWeight(uint32_t n) {
  int ret = 0;
  while (n) {
    n &= n - 1;
    ret++;
  }
  return ret;
}
};

 

 

posted on   ᶜʸᵃⁿ  阅读(11)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示