Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.
Example 1:
Input: 2
Output: [0,1,1]
Example 2:
Input: 5
Output: [0,1,1,2,1,2]
本题是给定一个整数n,然后需要计算[0, n]区间所有整数的二进制表示中1的个数,将结果存为数组最后返回。一个位运算的性质:二进制数i与i-1做逐位与操作可以消去i的最低位的一个1,利用这个性质就可以很容易计算一个二进制数中1的数目了。
class Solution {
public:
vector<int> countBits(int num) {
vector<int> result(num+1, 0);
for(int i= 0;i<=num;i++){
result[i] = count(i);
}
return result;
}
int count(int I){
int n1 = 0;
while(I>0){
I = I&(I-1);
n1++;
}
return n1;
}
};