当前位置:网站首页>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;
}
};
关于位运算(按位与、按位或、异或)可看 位运算(按位与、按位或、异或)
边栏推荐
- 若依集成browscap读取浏览器用户代理
- 消除对特权账户的依赖使用Kaniko构建镜像
- ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
- 盲埋孔PCB叠孔设计的利与弊
- Internet Download Manager简介及下载安装包,IDM序列号注册问题解决方法
- 友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
- RNA核糖核酸修饰Alexa 568/[email protected] 594/[email prote
- 【leetcode】剑指 Offer II 009. 乘积小于 K 的子数组(滑动窗口、双指针)
- 极验深知v2分析
- 力扣203-移除链表元素——链表
猜你喜欢
随机推荐
C中的数据存储
Alexa染料标记RNA核糖核酸|RNA-Alexa 514|RNA-Alexa 488|RNA-Alexa 430
利用net-snmp的库实现snmpget,snmpset
tRNA修饰2-甲基胞嘧啶(m2C)|tRNA修饰m2G (N2-methylguanosine)
Matlab paper illustration drawing template No. 42 - bubble matrix diagram (correlation coefficient matrix diagram)
信使mRNA甲基化偶联3-甲基胞嘧啶(m3C)|mRNA-m3C
dpkg强制安装软件
Internet Download Manager简介及下载安装包,IDM序列号注册问题解决方法
tensorflow-gpu2.4.1安装配置详细步骤
花 30 美金请 AI 画家弄了个 logo,网友:画得非常好,下次别画了!
危化企业双重预防机制数字化建设进入全面实施阶段
揭秘5名运维如何轻松管理数亿级流量系统
汉源高科8光口12电口交换机千兆8光8电12电16电网管型工业以太网交换机
Edge box + time series database, technology selection behind Midea's digital platform iBuilding
简易电子琴设计(c语言)
调用EasyCVR云台控制接口时,因网络延迟导致云台操作异常该如何解决?
化算力为战力:宁夏中卫的数字化转型启示录
【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
ECCV2022 | 用于视频问题回答的视频图Transformer