题目描述
算法分析
方法一:暴力
def countBits(self, n: int) -> List[int]:
#######################################################
def cnt(x):
return sum([1 for i in range(32) if x>>i & 1!=0])
return [cnt(i) for i in range(0,n+1)]
方法二:动态规划一
def countBits(self, n: int) -> List[int]:
########################################################
#方法二:动态规划
ans=[0]
for i in range(1,n+1):
ans.append(ans[i>>1]+(i&1))
return ans
方法三:动态规划二
def countBits(self, n: int) -> List[int]:
########################################################
#方法三:动态规划
ans=[0]
high=0
for i in range(1,n+1):
if i&(i-1)==0:
high=i
ans.append(ans[i-high]+1)
return ans