题目:
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以二进制表示时1的个数。
根据观察:
0 : 0
1:1
2:10
3: 11
4: 100
5: 101
可以看出,每一个数以二进制表示时都是除去最低位时1的个数加上最低位1的个数(即0或1),而除去最低位即表示除以2,所以很容易能得到转移方程res[num] = res[num / 2] + num % 2.
程序:
class Solution {
public:
vector<int> countBits(int num) {
vector<int> res(num + 1,0);
res[0] = 0;
for(int i = 1; i <= num; i++)
{
res[i] = res[i / 2] + (i % 2);
}
return res;
}
};