当前位置:网站首页>leetcode 剑指 Offer 15. 二进制中1的个数
leetcode 剑指 Offer 15. 二进制中1的个数
2022-08-03 20:06:00 【会编程的露娜】
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。
示例 1:
输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
提示:
输入必须是长度为 32 的 二进制串 。
思路一:& 和 >> (使用 按位与 和 右移运算符 逐位判断)
时间复杂度:O(n)
空间复杂度:O(1)
class Solution {
public:
int hammingWeight(uint32_t n) {
int sum=0;
while(n){
sum+=(n&1); // (n&1) 是判断最后一位是否为1。按位与的运算规则是:2进制数的对应位置中只有2个数字都为1,结果才为1
//因为1的二进制表示形式的32位中只有最后一个是1,所以前31位按位与之后都为0,那么就是判断最后一位是否都为1,若都是1则为真, (n&1) 的值为1,否则为0
n>>=1; //右移1位将最后一位删掉,高位正数补0,负数补1
}
return sum;
}
};
思路二:使用 n&(n-1)
class Solution {
public:
int hammingWeight(uint32_t n) {
int sum=0;
while(n){
n&=(n-1); //每一次的 n&=(n-1) 都将32位中最右侧的1变为0,直到最后n为0
++sum;
}
return sum;
}
};
关于位运算(按位与、按位或、异或)可看 位运算(按位与、按位或、异或)
边栏推荐
- 力扣203-移除链表元素——链表
- In-depth understanding of JVM-memory structure
- 多模态 参考资料汇总
- xss.haozi练习通关详解
- 友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
- RNA核糖核酸修饰RNA-HiLyte FluorTM 405荧光染料|RNA-HiLyte FluorTM 405
- 信使mRNA甲基化偶联3-甲基胞嘧啶(m3C)|mRNA-m3C
- The sword refers to Offer II 044. The maximum value of each level of the binary tree-dfs method
- Kubernetes资源编排系列之三: Kustomize篇 作者 艄公(杨京华) 雪尧(郭耀星)
- async 和 await 原来这么简单
猜你喜欢
随机推荐
tRNA-m5C转运RNA(tRNA)修饰5-甲基胞嘧啶(m5C)|tRNA修饰m1Am2A (2-methyladenosine)
危化企业双重预防机制数字化建设进入全面实施阶段
【微信小程序2】事件传参与数据同步[03]
LeetCode 1374. 生成每种字符都是奇数个的字符串
头条服务端一面经典10道面试题解析
RNA核糖核酸修饰荧光染料|HiLyte Fluor 488/555/594/647/680/750标记RNA核糖核酸
node版本切换工具NVM以及npm源管理器nrm
Anaconda 虚拟环境迁移
Statistical machine learning 】 【 linear regression model
云服务器如何安全使用本地的AD/LDAP?
深入理解JVM-内存结构
In-depth understanding of JVM-memory structure
染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56
dpkg强制安装软件
安装anaconda并创建虚拟环境
高效目标检测:动态候选较大程度提升检测精度(附论文下载)
「游戏建模干货」建模大师几步操作,学习经典,赶紧脑补一下吧
ARMuseum
百利药业IPO过会:扣非后年亏1.5亿 奥博资本是股东
不知道这4种缓存模式,敢说懂缓存吗?