比特位计数
作者:互联网
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。
/**
- 奇偶数计算二进制中1的个数:
- 1.偶数在二进制中最低位为0,所以偶数二进制中1的个数应该与该数/2后1的个数相当
- 2.奇数比前一个相邻的偶数多了1,即二进制最低位为1,1的个数比前一个相邻偶数多1
*/
想到这个,该题就很简单
/**
* 奇偶数计算二进制中1的个数:
* 1.偶数在二进制中最低位为0,所以偶数二进制中1的个数应该与该数/2后1的个数相当
* 2.奇数比前一个相邻的偶数多了1,即二进制最低位为1,1的个数比前一个相邻偶数多1
*/
class Solution {
public int[] countBits(int n) {
int[] num = new int[n+1];
//num[0]==0
int i = 1;
while(i <= n){
if ((i & 1) ==1)//i为奇数时
num[i] = num[i-1] + 1;
else
num[i] = num[i>>1];//即偶数/2向右移动一位
i++;//写while时先写出,需修改时修改,以防忘记
//看到有大佬写的更简便,如下
//num[i] = num[i>>1] + (i & 1);
//i++;
}
return num;
}
}
标签:比特,二进制,个数,偶数,计数,int,num,位为 来源: https://blog.csdn.net/m0_53022735/article/details/122752883