求二进制中1的个数,算法看不懂!请教!

lishuailw · · 987 次点击
更多评论
这个很简单啊,有啥看不懂的…… ``` pc[0]=0 pc[1]=pc[0]+1 //1 pc[2]=pc[1]+0 //1 ``` 保证了0,1,2三个都是对的 当i>2时 pc[n]等于 pc[n/2]+最后一位是否为1 pc n/2代表 2进制时前N位的累积 在加上最后以为,那么自然就是各个位上的数的总和了。 里面唯一要注意的点就是,整数操作的 / 是不计余数的整除,以及 byte是无符号的,byte(i&1)的值是0或1
#2
换成10进制罗嗦的伪代码算法给你对比下吧 ``` for i := range pc { sum[i] = sum[Math.Floor(i/10)] +(i % 10) } ```
#3