如果正整数 i 是一个偶数,那么 i 相当于将 i/2 左移一位的结果,因此偶数 i 和 i/2 的二进制形式 1 的个数是一样的 如果 i 是奇数,那么 i 相当于将 i/2 左移一位之后再将最右边的位设为 1 的结果,因此奇数 i 比 i/2 的二进制形式 1 的个数多 1 个 可以利用这个规律有如下代码
Go版本:
func countBits(n int) []int {
var res []int;
for i:=0;i<=n;i++{
res=append(res,0);
}
for i:=0;i<=n;i++{
res[i]=res[i>>1]+(i&1);
}
return res;
}
网友评论