21.58% 时间复杂度没有按要求
note:while判断的时候,首先要满足的条件放and左边
class Solution(object):
def countBits(self, num):
"""
:type num: int
:rtype: List[int]
"""
result = []
char=[0]
for number in range(num):
i = 0
result.append(char.count(1))
while(i<len(char) and char[i]==1):
char[i] = 0
i += 1
if i==len(char):
char.append(1)
else:
char[i] = 1
result.append(char.count(1))
return result
---------------------------------------------
又忘记bin()转化为二进制字串的这个函数
print bin(4) #0b100
33.71%
class Solution(object):
def countBits(self, num):
"""
:type num: int
:rtype: List[int]
"""
result = []
for i in range(num+1):
result.append(bin(i)[2:].count('1'))
return result
-----------------------------
这个规律隐藏太深。。
100% 美滋滋 从c++改到python 表面上看和上一个没差多少,但是估计是bin函数处理的内容轻松很多
class Solution(object):
def countBits(self, num):
"""
:type num: int
:rtype: List[int]
"""
result = [0]
for i in xrange(1,num+1):
result.append(bin(i&(i-1)).count('1')+1)
return result
----------------------------------
还有一种很妙的方法 考虑到所有的二进制数= 2的指数相加 也隐藏很深
56.28%
class Solution(object):
def countBits(self, num):
"""
:type num: int
:rtype: List[int]
"""
result = [0]
for i in xrange(1,num+1):
result.append(result[i/2]+i%2)
return result