给你一个整数 n
,对于 0 <= i <= n
中的每个 i
,计算其二进制表示中 1
的个数 ,返回一个长度为 n + 1
的数组 ans
作为答案。
例:
输入:n = 2 输出:[0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10
解析:
数学题,二进制乘2相当于左移一位,并不会增加1的数目,而奇数相当于左移然后加1。
class Solution(object):
def countBits(self, n):
"""
:type n: int
:rtype: List[int]
"""
res = [0]*(n+1) # 初始化
for i in range(1, n + 1):
if i % 2 == 0: # 偶数
res[i] = res[i/2]
else: # 奇数
res[i] = res[i/2] + 1
return res