方法一:直接count二进制中的"1"的个数
class Solution:
def countBits(self, num: int) -> List[int]:
count = []
for i in range(num+1):
count.append(bin(i).count("1"))
return count
方法二:利用二进制性质
i 为奇数:dp[i] = dp[i−1]+1
i 为偶数:dp[i] = dp[i//2]
class Solution:
def countBits(self, num: int) -> List[int]:
dp = [0] * (num + 1)
for i in range(1, num + 1):
if (i%2 == 1):
dp[i] = dp[i-1] + 1
else:
dp[i] = dp[i//2]
return dp
方法三:逐个递推
class Solution:
def countBits(self, num: int) -> List[int]:
dp = [0]
for i in range(1, num + 1):
dp.append(dp[i>>1]+(i&1))
return dp
class Solution:
def countBits(self, num: int) -> List[int]:
dp = [0]
for i in range(1, num + 1):
dp.append(dp[i>>1]+(i&1))
return dp