https://leetcode.com/problems/counting-bits/
在这道题里有一个提示, does the odd/even status of the number help you in calculating the number of 1s,仔细考虑一下,对于二进制数而言,右移就是将数变为原来的2倍。而整数的除法除以二相当于除以二的数向下取整。所以对于一个数的而言,这个数的二进制1的个数为:
● 如果i是偶数则res[i]=res[i/2]相当于将i/2右移,1的个数不变
● 如果i是奇数则res[i]=res[i/2]+1相当于将(i-1)/2右移变为i-1之后加1,1的个数加一
class Solution {
public:
vector<int> countBits(int num) {
vector<int> res(num+1,0);
for(int i=1;i<=num;i++){
if(i%2==0){
res[i]=res[i/2];
}
else{
res[i]=res[i/2]+1;
}
}
return res;
}
};