题目:
原文链接:https://leetcode-cn.com/problems/counting-bits/
思路:
- 暴力法直接遍历每个数字,并对数字进行二进制转换和统计1的个数
- 迭代法就是找规律,先列出前三个值,后面的可以根据规律直接取个数,需要注意的是结果的返回,需要根据输入切片返回指定值
代码:
class Solution:
def countBits(self, num: int) -> List[int]:
'''
# 暴力法
result = []
for i in range(num+1):
result.append(bin(i).count('1'))
return result
'''
# 迭代法
result = [0,1,1]
for i in range(3,num+1):
if i&1: # 奇数相当于前一个数的解+1
result.append(result[-1]+1)
else: # 偶数和它一半的那个数相同解
result.append(result[i//2])
# 切片避免下标越界
return result[0:num+1]