给定一个整数 n ,对于 0 ≤ i ≤ n 中的每个 i ,计算其二进制表示中 1 的个数并把它们返回。
例如:
给定一个整数:n = 2,返回结果:[0, 1, 1]
给定一个整数:n = 5,返回结果:[0, 1, 1, 2, 1, 2]
n的范围说明:0 ≤ n ≤ 10^5
bin()
把 i 转换为字符串格式的二进制数,比如 8
转为二进制数为 0b1000
count()
统计字符串中出现1的次数,并依次把出现次数添加到res中,最后进行返回def countBits(n): res = [0] for i in range(1, n + 1): res.append(bin(i).count("1")) return res
i // 2
def countBits(n): res = [0] for i in range(1, n + 1): if i % 2 != 0: res.append(res[i - 1] + 1) else: res.append(res[i // 2]) return res
我们还可以利用 Python 里的 位运算符
来实现,其大致与实现思路2的逻辑一致,但通过位运算符,我们可以让代码更简化。
&
按位与运算符:参与运算的两个二进制数, 如果两个相应位都为1, 则该位的结果为1, 否则为0;>>
右移动运算符:如 i >> 1
,表示将 i 对应的二进制数整体右移一位,其实也就相当于 i // 2
def countBits(n): res = [0] for i in range(1, n + 1): res.append(res[i >> 1] + (i & 1)) return res