题目
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
思路
本题考查的是对二进制的熟悉程度
-
对于奇数:二进制中,当前奇数一定比前一个偶数多一个1,因为多的就是最低位的1
举例: 0 = 0 1 = 1 2 = 10 3 = 11
-
对于偶数:二进制中,偶数中 1 的个数一定和除以 2 之后的那个数一样多,因为除以 2 相当于右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的
另外,0 的 1 个数为 0,于是就可以根据奇偶性开始遍历计算了。
java代码如下:
class Solution{
public int[] countBits(int n){
int[] res = new int[n + 1];
res[0] = 0;
for(int i = 1; i <= n; i++){
if(i % 2 == 1){//如果是奇数
res[i] = res[i-1] + 1;
} else {//如果是偶数
res[i] = res[i / 2];
}
}
return res;
}
}