191. 位1的个数
目录
一、问题描述
二、解题思路
三、代码
四、复杂度分析
一、问题描述
给定一个正整数 n
,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。
二、解题思路
强制将 n
当作无符号类型处理
-
即使原始
n
是负数,转换为unsigned int
后,仍然保留了其 32 位的补码表示。 -
num & 1
和num >>= 1
会安全地进行 32 次迭代,不会陷入死循环。 -
所以我们依然能正确统计 1 的个数!
三、代码
class Solution {
public:int hammingWeight(int n) {unsigned int num = static_cast<unsigned int>(n); // 转换为无符号整数int count = 0;while (num != 0) {count += (num & 1); // 判断最低位是否为1num >>= 1; // 无符号右移,不保留符号位}return count;}
};
四、复杂度分析
复杂度类型 | 复杂度 | 说明 |
---|---|---|
时间复杂度 | O(1) | 固定32位整数,最多32次循环 |
空间复杂度 | O(1) | 只使用常数个变量 |