leetcode 338. 比特位计数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/L1558198727/article/details/88896626

__builtin_popcount

class Solution {
public:

    vector<int> countBits(int num) {
        vector<int>ret;
        for(int i=0;i<=num;i++){
            ret.push_back(__builtin_popcount(i));
        }
        return ret;
    }
};

在这里插入图片描述

n&(n-1)

class Solution {
public:
    int cal(int num){
        int cnt = 0;
        while(num){
            num&=num-1;
            cnt++;
        }
        return cnt;
    }
    vector<int> countBits(int num) {
        vector<int>ret;
        for(int i=0;i<=num;i++){
            ret.push_back(cal(i));
        }
        return ret;
    }
};

在这里插入图片描述
n&(n-1)

n-1的时候 右往左数 第一个右面的0都变成1,这一个1 变成0
和n进行位与 则少了最后一个1
看能进行多少次这样的操作就是有多少个1

猜你喜欢

转载自blog.csdn.net/L1558198727/article/details/88896626