1. 题目
2. 题解
使用了最为基础的解法,通过对数字进行取余和除法运算将数字转换为了二进制形式,统计其中1的个数(取余结果相加即可),例如对于数字num=7,假设计数结果为 ans(初值为0),计数过程如下。
循环1:
ans+=num%2(ans=1)
num=num/2(num=3)
循环2:
ans+=num%2(ans=2)
num=num/2(num=1)
循环3:
ans+=num%2(ans=3)
num=num/2(num=0)
结束
得到比特1的个数为3
// Java
class Solution {
public int[] countBits(int n) {
int[] res=new int[n+1];
for(int i=0; i<=n; i++){
int tmp=0;
for(int j=i; j!=0; j=j/2){
tmp+=j%2;
}
res[i]=tmp;
}
return res;
}
}
// Go
func countBits(n int) []int {
var res []int
for i:=0; i<=n; i++{
res=append(res, One(i))
}
return res
}
func One(num int) int{
ans:=0
for i:=num; i!=0; i=i/2{
ans+=i%2
}
return ans
}