核心思想 计算1比特数应该怎么做?Brian Kernighan 算法 对于任意整数 xx,令 x=x & (x−1),该运算将 xx 的二进制表示的最后一个 11 变成 00。因此,对 xx 重复该操作,直到 xx 变成 00,则操作次数即为 xx 的「一比特数」。 针对第二题,只需要将while条件变为!=0即可
while x >0{int nums =0;
x = x &(x-1);
nums++;}
代码
classSolution{publicint[]countBits(int n){int[] result =newint[n+1];for(int i =0;i <=n;i++){
result[i]=cal(i);}return result;}publicintcal(int x){int nums =0;while(x >0){
x &=(x-1);
nums++;}return nums;}}
publicclassSolution{// you need to treat n as an unsigned valuepublicinthammingWeight(int n){System.out.println(n);int nums =0;while(n !=0){
n &=(n-1);
nums++;}return nums;}}