千家信息网

leetcod如何实现比特位计数

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下leetcod如何实现比特位计数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题目内容给定一个非负整
千家信息网最后更新 2026年11月01日leetcod如何实现比特位计数

小编给大家分享一下leetcod如何实现比特位计数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、题目内容

给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

示例 1:

输入: 2
输出: [0,1,1]

示例 2:

输入: 5
输出: [0,1,1,2,1,2]

进阶:

给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?
要求算法的空间复杂度为O(n)。
你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 __builtin_popcount)来执行此操作。

二、解题思路

动态规划,i>>1指的是i右移一位,这样的话i的最低位会被去掉,因此i与i>>1相当于比较最后一位是否为1;

当 i 的最低位为0,则 i 和i >> 1中1的个数是一样的,因为0不算进计算1的个数;

否则,最低位为1,1相当于被抹掉了,因此 i >> 1中1的个数加1就是i 中1的个数;

三、代码

class Solution:    def countBits(self, num: int) -> list:        dp = [0 for _ in range(num + 1)]        for i in range(num + 1):            i_last_num = i & 1  # 得到i的末位数字            if i_last_num == 0:                dp[i] = dp[i >> 1]            else:                dp[i] = dp[i >> 1] + i_last_num        return dpif __name__ == '__main__':    s = Solution()    num = 5    ans = s.countBits(num)    print(ans)

以上是"leetcod如何实现比特位计数"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

个数 最低 内容 篇文章 复杂 复杂度 数字 时间 示例 C++ 输入 输出 这样的话 不怎么 二进制 代码 函数 动态 大部分 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司起名 互联网巨头反垄断金融科技 紫鲸互联网科技 广州互联网络科技有限公司 上海卓越科技 互联网 丰台科技园 互联网公司 科技与互联网的利与弊 北京三清互联网科技 中盈科技互联网信息有限公司 互联网科技有哪些公司 青岛科技大学互联网大赛研究生 苏州铭阳互联网科技有限公司 开一家科技互联网公司需要多少钱 互联网科技创新的路径 阿里互联网科技企业 美国互联网科技实力 富国互联网金融科技混合基金 普陀区互联网教育科技管理办法 福仕德教育科技互联网 长沙易易互联网科技有限公司 互联网科技有限公司图片 美国互联网科技巨头监管 广州善班互联网科技 赶超互联网科技 微信多开 华夏恒生互联网科技013171 内蒙古九一互联网科技 互联网金融科技元年 工业互联网科技创业 2021世界互联网领先科技成果发布 保山互联网科技靠谱吗
0