当前位置:网站首页>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;
}
};
关于位运算(按位与、按位或、异或)可看 位运算(按位与、按位或、异或)
边栏推荐
猜你喜欢

头条服务端一面经典10道面试题解析
[email protected] 610/[email protected] 594/Alexa 56"/>染料修饰核酸RNA|[email protected] 610/[email protected] 594/Alexa 56

算法--交错字符串(Kotlin)

微导纳米IPO过会:年营收4.28亿 君联与高瓴是股东

调用EasyCVR接口时视频流请求出现404,并报错SSL Error,是什么原因?

安装anaconda并创建虚拟环境

详解AST抽象语法树

机器学习中专业术语的个人理解与总结(纯小白)

In-depth understanding of JVM-memory structure

ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
随机推荐
8.2模拟赛总结
Golang死信队列的使用
C中的数据存储
matplotlib画polygon, circle
RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
RNA核糖核酸修饰Alexa 568/[email protected] 594/[email prote
按需视觉识别:愿景和初步方案
自定义form表单验证
头条服务端一面经典10道面试题解析
Go语言为任意类型添加方法
单调栈及其应用
一种能有效缓解环境噪声对音频质量干扰的方案
charles配置客户端请求全部不走缓存
codeforces:C. Maximum Subrectangle【前缀和 + 贪心 + 最小子数组和】
边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
涨薪5K必学高并发核心编程,限流原理与实战,分布式计数器限流
利用 rpush 和 blpop 实现 Redis 消息队列
JMeter笔记5 |Badboy使用和录制
xss.haozi练习通关详解
告诉你0基础怎么学好游戏建模?