191. 位1的个数

目录

一、问题描述

二、解题思路

三、代码

四、复杂度分析


一、问题描述

给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。

二、解题思路

强制将 n 当作无符号类型处理

  • 即使原始 n 是负数,转换为 unsigned int 后,仍然保留了其 32 位的补码表示

  • num & 1num >>= 1 会安全地进行 32 次迭代,不会陷入死循环。

  • 所以我们依然能正确统计 1 的个数!

三、代码

cpp 复制代码
class Solution {
public:
    int hammingWeight(int n) {
        unsigned int num = static_cast<unsigned int>(n); // 转换为无符号整数
        int count = 0;
        while (num != 0) {
            count += (num & 1);  // 判断最低位是否为1
            num >>= 1;           // 无符号右移,不保留符号位
        }
        return count;
    }
};

四、复杂度分析

复杂度类型 复杂度 说明
时间复杂度 O(1) 固定32位整数,最多32次循环
空间复杂度 O(1) 只使用常数个变量
相关推荐
CYRUS_STUDIO5 分钟前
破解 VMP+OLLVM 混淆:通过 Hook jstring 快速定位加密算法入口
android·算法·逆向
武帝为此8 分钟前
【数据结构中哈希函数与哈希表】
数据结构·哈希算法·散列表
?abc!2 小时前
(哈希)128. 最长连续序列
算法·leetcode·哈希算法
Zephyrtoria2 小时前
动态规划:01 背包(闫氏DP分析法)
java·算法·动态规划
范纹杉想快点毕业2 小时前
解析Qt文件保存功能实现
java·开发语言·c++·算法·命令模式
Yrrr12 小时前
Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)
数据库·redis·面试·职场和发展
Uyker3 小时前
前端与后端主流框架分类及关键特性
前端·算法·django
2301_799084673 小时前
Codeforces Round 1032 (Div. 3)
数据结构·c++·算法
岁忧3 小时前
(LeetCode 每日一题) 2016. 增量元素之间的最大差值 (数组)
java·c++·算法·leetcode·职场和发展·go