边工作边刷题:70天一遍leetcode: day 46-1

Counting Bits

要点:这题一开始没想出来,看了hint解出来了。估计想时间长点是可以想出来的。就是gray code的类似思路,新序列就是已经得到结果的序列左边高位补1,所以即1的个数+1。所以按这个顺序iterate多遍直到某个值超过了num

class Solution(object):
    def countBits(self, num):
        """
        :type num: int
        :rtype: List[int]
        """
        res = [0]*(num+1)
        if num==0: return res
        res[1]=1
        if num==1: return res
        end = 2
        while True:
            for i in xrange(end):
                if end+i<num+1:
                    res[end+i]=res[i]+1
                else:
                    return res
            end+=end

posted @ 2016-06-28 04:08  absolute100  阅读(95)  评论(0编辑  收藏  举报