LeetCode 338. Counting Bits

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

v2-ca450aa13798c855299cb401a43da7f3_1440w.jpg

Description



Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.


Example 1:

Input: 2

Output: [0,1,1]


Example 2:

Input: 5

Output: [0,1,1,2,1,2]


Follow up:

It is very easy to come up with a solution with run time O(n*sizeof(integer)). But can you do it in linear time O(n) /possibly in a single pass?

Space complexity should be O(n).

Can you do it like a boss? Do it without using any builtin function like __builtin_popcount in c++ or in any other language.


描述



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


思路



  • 二进制数 0 到 7 在前面添加一个 1 构成 8 到 15,二进制数 0 到 15 在前面添加一个 1 构成 16 到 31.
  • 每 2 ^ i 到 2 ^ (i+1)-1 为一组,前面的数的 1 的个数加一构成当前组对应二进制数 1 的个数。


# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2019-04-07 11:54:35
# @Last Modified by:   何睿
# @Last Modified time: 2019-04-07 12:22:34
class Solution:
    def countBits(self, num: int) -> [int]:
        # 结果数组
        result, count = [0], 1
        while count * 2 <= num:
            # 从 resut 数组中索引对应的二进制数前面加
            # 一个 1 构成范围从 count 到 count*2 -1 的数(包括两端)
            for i in range(count, count * 2):
                result.append(1 + result[i - count])
            count *= 2
        # 处理剩下的数
        for i in range(count, num + 1):
            result.append(1 + result[i - count])
        return result

源代码文件在 这里


目录
相关文章
LeetCode 190. Reverse Bits
颠倒给定的 32 位无符号整数的二进制位。
233 0
LeetCode 190. Reverse Bits
|
C++
Leetcode-Medium 338. Counting Bits
Leetcode-Medium 338. Counting Bits
146 0
【LeetCode】Counting Bits(338)
  Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.
154 0
LeetCode 191 Number of 1 Bits(1 比特的数字们)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50506429 翻译 写一个函数获取一个无符号整型数,并且返回它的“1”比特的数目(也被叫做Hamming weight)。
1072 0
LeetCode 191 Number of 1 Bits
题目描述: Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
1065 0
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
248 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行

热门文章

最新文章

下一篇
oss云网关配置