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) 只使用常数个变量
相关推荐
电摇小人14 小时前
莫比乌斯反演详细解说来啦!!!
数据结构·算法
7澄114 小时前
数据结构进阶:从链表到红黑树(二叉树、平衡树、红黑树核心解析)
数据结构·链表·二叉树·红黑树·平衡二叉树·旋转·二叉排序树
buyue__14 小时前
C++实现数据结构——队列
数据结构·c++
Hui Baby14 小时前
LSM 原理、实现及与 B+ 树的核心区别
java·linux·算法
爬山算法15 小时前
Netty(13)Netty中的事件和回调机制
java·前端·算法
hweiyu0015 小时前
数据结构:广义表
数据结构
CoovallyAIHub15 小时前
是什么支撑L3自动驾驶落地?读懂AI驾驶与碰撞预测
深度学习·算法·计算机视觉
玉树临风ives15 小时前
atcoder ABC436 题解
c++·算法·leetcode·atcoder·信息学奥赛
圣保罗的大教堂15 小时前
leetcode 2110. 股票平滑下跌阶段的数目 中等
leetcode
patrickpdx15 小时前
leetcode:相等的有理数
算法·leetcode·职场和发展