题意:给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
思路:通过比特位对比 你会发现其实每次都是除了高位变化,其实其他位置一直 再重复之前的计数 这样就很容易利用之前的已经计算好的答案了。
code:
class Solution:
def countBits(self, num: int) -> List[int]:
nums = [None] * (num + 1)
nums[0], pos, now = 0, 0, 0
for i in range(1, num + 1):
if now == pos:
pos = i
now = 1
nums[i] = 1
else:
nums[i] = 1 + nums[now]
now += 1
return nums