首页 > 其他 > 详细

338. Counting Bits

时间:2018-10-06 11:47:09      阅读:163      评论:0      收藏:0      [点我收藏+]

问题

输出一个数组,元素为[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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!