问题:
https://leetcode.com/problems/counting-bits/?tab=Description
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: For num = 5 you should return [0,1,1,2,1,2].
给出一个非负整数num,求出0-num范围内的(num+1)个整数,每个整数的二进制表达中1的位数。
分析:
0 1 10 11 100 101 110 111 就是在数字后面不断的加0,加1。 1->10/11 10->100/101 11->110/111 因此第i位就是第i/2位+(i%2)的值。
参考C++代码:
class Solution {
public:
vector<int> countBits(int num) {
vector<int> result(num+1,0);
result[0]=0;
for(int i=1;i<num+1;i++){
result[i]=result[i/2]+i%2;
}
return result;
}
};