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),其运算结果恰为把 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;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)