338. 比特位计数
问题:
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
示例 1:
输入:n = 2
输出:[0,1,1]
解释:
0 --> 0
1 --> 1
2 --> 10
示例 2:
输入:n = 5
输出:[0,1,1,2,1,2]
解释:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101
提示:
0 <= n <= 105
解决:
如果是奇数:二进制1的个数是前面偶数的加1
如果是偶数:二进制1的个数是前面偶数相等
func countBits(n int) []int {
h:=make([]int,n+1)
h[0]=0
for i:=0;i<=n;i++{
if i%2==1{
h[i]=h[i-1]+1
} else{
h[i]=h[i/2]
}
}
return h
}