考察点:dp,bit运算&;
思路:重点是理解i&(i-1)是将数字 i 的二进制格式下最右边的1转换成0;dp[i]的含义是数字i的1bit数目,因此dp[i] = dp[i&(i-1)] + 1;就好理解了。
C++代码:
class Solution {
public:
vector<int> countBits(int num) {
vector<int> ret(num+1, 0);
for (int i=1; i<=num; i++) {
ret[i] = ret[i&(i-1)] + 1;
}
return ret;
}
};