- 比特位计数
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
示例 1:
输入: 2
输出: [0,1,1]
示例 2:
输入: 5
输出: [0,1,1,2,1,2]
思路:理解数递增时的位操作即可,数每翻2倍就进一位。,即(0,1)(2,3),(4,5,6,7)
每个括号中的数位数相同,且逐一递增
0 1 (表示0,1)
10 11 //低位(从2开始)
100 101 110 111 //进了一位(从4开始了)
观察可知高位对应的低位(从0开始的低位)都多一个1(进位而来的)
完整代码
class Solution {
public int[] countBits(int num) {
int []res =new int [num+1];//i可等于1,数组中的元素个数加一;
if(num==0){
return res;//为0时返回空
}
res[0]=0;
res[1]=1;//设置低位的1的数目
for(int i=2;i<=num;i*=2){//每次均移动一位;
//0 1 10 11 100 101 110 111
int mid=i;
for(int j=0;j<i&&mid<=num;j++){
res[mid++]=res[j]+1;//高位均比低位多一个进一
}
}
return res;
}
}