LeetCode刷题笔记338:比特位计数(Python实现)

系统 2006 0

题目描述:

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

SOLUTION:暴力破解

没有想到啥好方法,只想到暴力破解,但也能通过...

将 0 ≤ i ≤ num 范围中的每个数字 i的二进制中的所含有1的个数数出(用的是collections中的Counter方法)并存放到一个数组里

CODE:

            
              from collections import Counter
class Solution:
    def countingBits(self,num):
        '''
        parms num:int
        return: list[int]      
        '''
        if num < 0:
            return
        nums = []
        c = []
        result = []
        for i in range(0,num+1):
            nums.append(str(bin(i)))
        for j in range(len(nums)):
            c.append(Counter(nums[j])
        for k in range(len(c)):
            result.append(c[k]['1'])
        return result
            
        
            
        
            
          

 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论