码迷,mamicode.com
首页 > 其他好文 > 详细

338. Counting Bits

时间:2018-10-06 12:08:43      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:return   个数   二进制   code   input   python   range   lis   for   

问题

输出一个数组,元素为[0, num]中每个数的二进制数中1的个数。

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

思路

对于二进制以0结尾的(能被2整除)数,加1后1的个数加1。比如111比110多一个1。对于二进制以1结尾的数,加1后变成以0结尾的数,此时1的个数会等于这个数的1/2的1的个数。比如110和11的1的个数相同。
i能被2整除时:\(dp[i] = dp[i-1] +1\)
否则:\(dp[i] = dp[i/2]\)

  • 时间复杂度O(n),空间复杂度O(n)

代码

class Solution(object):
    def countBits(self, num):
        """
        :type num: int
        :rtype: List[int]
        """
        lis = [0] * (num+1)
        for i in range(1,num+1):
            if(i % 2 == 1):
                lis[i] = lis[i-1] + 1
            else:
                lis[i] = lis[i/2]
        return lis

338. Counting Bits

标签:return   个数   二进制   code   input   python   range   lis   for   

原文地址:https://www.cnblogs.com/liaohuiqiang/p/9746820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!