题目:给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
思路:动态规划+位运算
具体:对于整数k,1的总数目分为两部分——最后一位是否为1+前n位1的总数(通过右移一位)
class Solution(object):
def countBits(self, num):
"""
:type num: int
:rtype: List[int]
"""
ret = [0]
for i in xrange(1, num+1):
ret.append(ret[i>>1] + i%2)
return ret