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) 只使用常数个变量
相关推荐
IronMurphy4 小时前
【算法四十三】279. 完全平方数
算法
墨染天姬4 小时前
【AI】Hermes的GEPA算法
人工智能·算法
papership4 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826525 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
山甫aa5 小时前
差分数组 ----- 从零开始的数据结构
数据结构
早日退休!!!5 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
Beginner x_u5 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
wxy不爱写代码5 小时前
C++多线程
面试·职场和发展
丑八怪大丑5 小时前
Java数据结构与集合源码
数据结构
野生技术架构师8 小时前
金三银四面试总结篇,汇总 Java 面试突击班后的面试小册
java·面试·职场和发展