【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;
    }
};
相关推荐
All for pursuit.1 分钟前
【二叉树-10】114.二叉树展开为链表
数据结构·c++·算法·leetcode·链表
叠层归一研究院3 分钟前
区分预算与通道诱导:Ω–L叠层体系的观测赋值与定量验证
人工智能·算法
多弗朗皮卡丘6 分钟前
C++string类
c++
BYSJMG25 分钟前
计算机毕业设计选题推荐:基于大数据的快递物流运营数据分析与可视化,Spark与K-Means
大数据·算法·数据分析·spark·课程设计
阳明山水1 小时前
因果一致性正则化实战解析
人工智能·深度学习·算法·机器学习·架构
Yunovian1 小时前
AI时代,针对模型与应用,浅谈一下各编程语言
开发语言·c++·人工智能·python·ai·rust·ai编程
黄金龙PLUS2 小时前
5个1024比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密
心中有你02142 小时前
C语言埃氏筛法(素数筛选)
c语言·数据结构·算法
Omics Pro4 小时前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
释厄6235 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析