前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 训练场:338. 比特位计数

LeetCode 训练场:338. 比特位计数

作者头像
村雨遥
发布2022-06-15 10:20:55
1480
发布2022-06-15 10:20:55
举报
文章被收录于专栏:JavaPark

1. 题目

338. 比特位计数

2. 描述

给定一个非负整数 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)来执行此操作。

3. 实现方法

3.1 方法 1

3.1.1 思路
  1. 暴力法
  2. 定义一个方法 countBit 用于计算一个整数的二进制中 1 的个数;
  3. 然后定义数组 result 用于存放最终结果;
  4. 遍历 0 ~ num ,求每个数对应的二进制中 1 的个数,并存入 result 即可;
3.1.2 实现
代码语言:javascript
复制
public int[] countBits(int num) {
    // 存放最终结果
    int[] result = new int[num + 1];
    // 遍历每个数,并将其二进制中 1 的个数存入数组 result
    for(int i = 0; i < num + 1;i++){
        result[i] = countBit(i);
    }

    return result;
}

/**
* 求一个数的二进制中 1 的个数
*/
public int countBit(int num){
    // 将 num 转换为二进制字符串
    String str = Integer.toBinaryString(num);
    int count = 0;
    // 统计二进制字符串中 1 的个数,并返回
    for(int i = 0;i < str.length(); i++){
        if(str.charAt(i) == '1'){
            count++;
        }
    }
    return count;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 描述
  • 3. 实现方法
    • 3.1 方法 1
      • 3.1.1 思路
      • 3.1.2 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档