題目:

解答:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* countBits(int n, int* returnSize)
{
int c0 = 0;
int c1 = 0;
int *r = malloc(sizeof(int) * (n + 1));
*returnSize = n + 1;
memset(r, 0, sizeof(int) * (n + 1));
for (c0 = 0; c0 <= n; c0++) {
int val = c0;
for (c1 = 0; c1 < 64; c1++) {
r[c0] += (val & 1);
val >>= 1;
}
}
return r;
}