Leetcode--338. 比特位计数
如果i是奇数,那么i的二进制表示比i-1多一个1,因此1的数量等于i-1的1的数量加1。 如果i是偶数,那么i的二进制表示最后一个是0,去掉这个0后,剩下的部分就是i/2的二进制表示,因此1的数量等于i/2的1的数量。 初始化数组:我们创建了一个大小为num+1的数组dp,用于存储每个数字的1的数量。 递推关系:遍历每个数字i,从1到num: 输出结果:读取输入的数字,调用countBits方法计算结果,并输出每个数字的1的数量。
发布日期:2021-04-30 21:02:26
浏览次数:101
分类:精选文章
本文共 1079 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要计算给定范围内每个数字的二进制表示中1的数量。通过动态规划,我们可以在O(n)的时间复杂度内完成这个任务,同时保持空间复杂度为O(n)。
方法思路
我们可以利用动态规划来解决这个问题。对于每个数字i:
这种方法的时间复杂度为O(n),因为我们只需要遍历每个数字一次。空间复杂度为O(n),因为我们使用了一个大小为n+1的数组来存储中间结果。
解决代码
public class Solution338 { public static int[] countBits(int num) { int[] dp = new int[num + 1]; dp[0] = 0; for (int i = 1; i <= num; i++) { if (i % 2 == 1) { dp[i] = dp[i - 1] + 1; } else { dp[i] = dp[i / 2]; } } return dp; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int[] dp = countBits(x); for (int i = 0; i <= x; i++) { System.out.print(dp[i] + " "); } }} 代码解释
- 如果i是奇数,dp[i] = dp[i-1] + 1。
- 如果i是偶数,dp[i] = dp[i/2]。
这种方法高效且直接,能够在O(n)的时间内完成任务,同时保持了较低的空间复杂度。
发表评论
最新留言
很好
[***.229.124.182]2026年05月31日 17时01分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php 反射
2023-02-27
PHP 实现N阶矩阵相乘
2023-02-28
php 延迟静态绑定static关键字
2023-02-28
Redis入门
2023-02-28
PHP 截取字符串乱码的解决方案
2023-02-28
php 接口类与抽象类的实际作用
2023-02-28
PHP 插入排序 -- 折半查找
2023-02-28
PHP 支持8种基本的数据类型
2023-02-28
php 放大镜,放大镜放大图片效果
2023-02-28
PHP 数据库连接池实现
2023-02-28
php 数组 区别,PHP中数组的区别
2023-02-28
PHP 数组怎么添加一个元素
2023-02-28
PHP 文件操作
2023-02-28
php 文字弹幕效果代码,HTML5文字弹幕效果
2023-02-28
php 时间日期函数,获取今天开始时间,结束时间
2023-02-28
php 标准规范
2023-02-28
PHP 浮点型精度运算相关问题
2023-02-28
php 浮点型计算精度问题
2023-02-28
php 特定时间段统计,jpgraph某个时间段的数据统计
2023-02-28
php 生成csv mac下乱码
2023-02-28