剑指 Offer II 003. 前 n 个数字二进制中 1 的个数-c语言常规做法
给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。
示例 1:
输入: n = 2
输出: [0,1,1]
解释:
0 --> 0
1 --> 1
2 --> 10
示例 2:
输入: n = 5
输出: [0,1,1,2,1,2]
解释:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101
这题可能没什么好做的,我们按照正常做法去处理即可,解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int count(int n){
int c=0;
while(n){
if(n%2==1){
c++;
}
n=n/2;
}
return c;
}
int* countBits(int n, int* returnSize){
int *re=(int *)malloc(sizeof(int)*(n+1));
for(int i=0;i<=n;i++){
re[i]=count(i);
}
*returnSize=n+1;
return re;
}