【LeetCode75】第六十七题 比特位计数

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一个整数n,要我们返回一个长度为n+1的数组,数组的第 i 位元素是 整数 i 的二进制数拥有的1的数目。例如 10 的二进制是 1010,所以10拥有的1的数目是2。

那么我们直接从0遍历到n+1,再单独算出这个数拥有的1的数目就可以了。

第一种方法就是C++有内置一个函数,直接统计你这个数的二进制有多少个1,直接使用这个函数就可以得出来:

cpp 复制代码
__builtin_popcount(i)

第二种方法就是我们直接手算。我们可以从一个数的二进制的右边第一位开始统计1的数目。如果一个数余2等于1,那么它的右边第一位就是1。

所以我们可以反复对这个数余2再除2,直到这个数变成了0,那么我们也就统计出了1的数目。

代码:

cpp 复制代码
class Solution {
public:
    //手动计算每个数的二进制有多少1
    vector<int> countBits(int n) {
        vector<int>res(n+1,0);
        int temp=0;
        for(int i=0;i<=n;i++){
            temp=i;
            while(temp){
                //可以写成 res[i]+=temp&0x1;temp>>=1;
                res[i]+=temp%2;
                temp/=2;
            }
        }
        return res;
    }
    
    //使用内置函数 
    vector<int> countBits(int n) {
        vector<int>res(n+1,0);
        for(int i=0;i<=n;i++){
            res[i]=__builtin_popcount(i);
        }
        return res;
    }
};
相关推荐
lihao lihao1 分钟前
二分查找
java·数据结构·算法
Albert Edison1 分钟前
【C++11】可变参数模板
java·开发语言·c++
WolfGang0073213 分钟前
代码随想录算法训练营 Day15 | 二叉树 part05
数据结构·算法
sheeta19984 分钟前
LeetCode 每日一题笔记 2025.03.20 3567.子矩阵的最小绝对差
笔记·leetcode·矩阵
代码栈上的思考4 分钟前
消息队列持久化:文件存储设计与实现全解析
java·前端·算法
qq_4176950514 分钟前
内存对齐与缓存友好设计
开发语言·c++·算法
2301_8166512214 分钟前
实时系统下的C++编程
开发语言·c++·算法
晓纪同学15 分钟前
EffctiveC++_02第二章
java·jvm·c++
2401_8318249615 分钟前
C++与Python混合编程实战
开发语言·c++·算法
※※冰馨※※21 分钟前
【QT】TortoiseGit配 SSH 克隆 Codeup
开发语言·c++·windows