easy 剑指 Offer 二进制中1的个数 位运算 STL

本文介绍了两种计算整数汉明重量的方法:位操作(通过按位与和右移)和逐位检查。位运算方法利用n&1和n>>1实现高效计数,而朴素方法则是遍历每位。最后,展示了C++ STL中的__builtin_popcount用于快速计数1的个数。
摘要由CSDN通过智能技术生成

在这里插入图片描述


位运算 方法一:

通过 n & 1 来统计当前 nn 的最低位是否为 1,同时每次直接对 n 进行右移并高位补 0。

python


class Solution:
    def hammingWeight(self, n: int) -> int:
        res = 0
        while n:
            res += n & 1    # 0&1=0, 1&0=0, 0&0=0, 1&1=1 与 只有遇到1的时候才得1,并计数
            n >>= 1         # 右移一位   >>= 意思为:右移后赋值
        return res

c++


class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res = 0;
        while(n){
            res += n & 1;
            n >>= 1;
        }
        return res;
    }
};

在这里插入图片描述


位运算 方法二:

一个朴素的做法是,对 int 的每一位进行检查,并统计 11 的个数。

c++


class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res = 0;
        for(int i=0;i<32;i++){
            res += ((n>>i) & 1);  // 
        }
        return res;
    }
};

python


class Solution:
    def hammingWeight(self, n: int) -> int:
        res = 0
        for i in range(32):  # n为32位
            res += ((n>>i) & 1)  # 右移i位后,再 与1
        return res

在这里插入图片描述


函数:

c++ STL


__builtin_popcount()计算二进制中多少个1


class Solution {
public:
    int hammingWeight(uint32_t n) {
        return __builtin_popcount(n);
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值