当前位置:网站首页>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;
}
};
关于位运算(按位与、按位或、异或)可看 位运算(按位与、按位或、异或)
边栏推荐
猜你喜欢
高并发,你真的理解透彻了吗?
深入理解JVM-内存结构
Go语言类型与接口的关系
RNA-ATTO 390|RNA-ATTO 425|RNA-ATTO 465|RNA-ATTO 488|RNA-ATTO 495|RNA-ATTO 520近红外荧光染料标记核糖核酸RNA
后台图库上传功能
Line the last time the JVM FullGC make didn't sleep all night, collapse
数学之美 第六章——信息的度量和作用
从文本匹配到语义相关——新闻相似度计算的一般思路
Node version switching tool NVM and npm source manager nrm
622 设计循环队列——Leetcode天天刷【循环队列,数组模拟,双指针】(2022.8.2)
随机推荐
盘点在线帮助中心对企业能够起到的作用
Golang死信队列的使用
DeepMCP网络详解
剑指 Offer II 044. 二叉树每层的最大值-dfs法
622 设计循环队列——Leetcode天天刷【循环队列,数组模拟,双指针】(2022.8.2)
第三方验收测试报告有什么作用?如何获取权威软件测试报告?
入门3D建模基础教程详细分解
揭秘5名运维如何轻松管理数亿级流量系统
【STM32】标准库-自定义BootLoader
149. The largest number on a straight line, and check the set
倒计时2天,“文化数字化战略新型基础设施暨文化艺术链生态建设发布会”启幕在即
Detailed explanation of JWT
php截取中文字符串实例
wordpress建立数据库连接时出错
149. 直线上最多的点数-并查集做法
力扣59-螺旋矩阵 II——边界判断
matplotlib画polygon, circle
C中的数据存储
YARN功能介绍、交互流程及调度策略
tensorflow-gpu2.4.1安装配置详细步骤