1. 题目解析
题目链接:191. 位1的个数
这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。
核心在于计算题目所给32位二进制数1的个数返回即可。
2.算法原理
-
位运算特性:通过位运算,特别是按位与(&)运算和右移(>>)运算,可以逐位检查一个数的二进制表示中的每一位。
-
循环检查:将输入的整数与1进行按位与运算,如果结果为1,则说明最低位是1;否则,说明最低位是0。然后,将整数右移一位,继续检查下一位,直到检查完所有位。
-
计数:在循环中,每检测到一位为1,就增加计数器的值。最终,计数器的值即为二进制表示中1的个数。
算法步骤:
- 初始化计数器为0。
- 循环执行以下操作,直到整数变为0:
- 对整数和1进行按位与运算,得到最低位的值。
- 如果结果为1,则计数器加1。
- 将整数右移一位。
- 返回计数器的值作为结果。
这个算法的时间复杂度是O(k),其中k是整数中1的个数,因为需要遍历每一位来检查是否为1。在最坏情况下,当整数全为1时,时间复杂度是O(32),因为题目中指定了输入是长度为32的二进制串。
3.代码编写
class Solution
{
public:int hammingWeight(uint32_t n) {int ret = 0;for(int i = 0; i < 32; i++){if((n >> i) & 1){ret++;}}return ret;}
};
The Last
嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。
觉得有点收获的话,不妨给我点个赞吧!
如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~