二进制中1的个数

题目 二进制中1的个数

image-2c4ed432

思路分析

一个int类型的变量有32位,想要取出第i位就是n >> i & 1

1的二进制是000…01 所以和任何数进行&运算结果都只可能是0或1

那么直接是0就加0 是1就加1 等同于对1做了一个计数

然后可以控制次数 直接写死32位

也可以每轮取出最后一个后 把x右边划掉一个

用while(x)写

当然还可以直接用lowbit()

x&-x

bitset也行

代码实现

//解法1

class Solution {

public:

    int NumberOf1(int n) {

        int res = 0;

        for (int i = 0; i < 32; i ++)

            res += n >> i & 1;//如果n的第i位是1,则res+1;否则什么也不会发生

        return res;

    }

};

//解法2

class Solution {

public:

    int NumberOf1(int n) {

        unsigned int x = n;

        int res = 0;

        while (x) res += x & 1, x >>= 1;

        return res;

    }

};

//解法3

class Solution {

public:

    //返回x的lowbit值

    int lowbit(int x)

    {

        return x & (-x);

    }

    int NumberOf1(int n) {

        int res = 0;

        while (n)

        {

            n -= lowbit(n);//每次减去lowbit(n)

            res ++;

        }

        return res;

    }

};

同类题型

视频讲解


⬅️ 中等计算 🏠 00-刷题理模型 ➡️ 位操作练习