您的位置:首页 > 其它

106.Counting Bits

2016-04-05 10:00 211 查看
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and
return them as an array.

Example:

For
num = 5
you should return
[0,1,1,2,1,2]
.

给定一个整数num,计算小于等于num的每个自然数中包含的1的个数。

思路1:依次计算每个自然数中1的个数即可。
给定一个整数num,计算小于等于num的每个自然数中包含的1的个数。

public int[] countBits(int num) {

int[] result = new int[num+1];
for(int i = 0;i<=num;i++){
result[i] = count1Num(i);
}

return result;
}
/*统计某个整数的二进制位中包含1的个数*/
public int count1Num(int n){
int count = 0;
while(n!=0){
n = n & (n-1);
count++;
}
return count;
}

思路2:对于自然数i来说,如果i%2==0,说明i是在i/2的基础上左移了一位,那么i和i/2中1的个数是相同的;如果i%2==1,那就说明i是在i/2的基础上左移一位之后再加1,则1的个数加1.

public int[] countBits(int num) {

int[] result = new int[num+1];
result[0] = 0;
for(int i = 1;i<=num;i++){
if(i%2==0){/*如果i%2==0,说明i是在i/2的基础上左移了一位*/
result[i]=result[i/2];
}else{/*i%2==1,那就说明i是在i/2的基础上左移一位之后再加1,则1的个数加1*/
result[i]=result[i/2]+1;
}

}

return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: