给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
思路:首先要理解n&(n-1)是消除n的二进制中最后一个1的。i&(i-1)一定比i小,所以res[i&(i-1)]已经求出来了,i比i&(i-1)多了一个1,所以res[i]=res[i&(i-1)]+1
vector<int> countBits(int n) {
vector<int>res(n+1);
for(int i=1;i<=n;i++){
res[i]=res[i&(i-1)]+1;
}
return res;
}