剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。
循环遍历n的前n个数,偶数去掉最低位,奇数是前一个偶数+1,就是加上最低位的1
因为偶数的二进制是该数的一半,因此是右移一位
class Solution {
public int[] countBits(int n) {
int[] bit=new int[n+1];
for(int i=0;i<=n;i++){
bit[i]=bit[i>>1]+(i&1);
}
return bit;
}
}