输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

2019-02-23  本文已影响0人  霍运浩

1 常规解法

首先将n和flag=1进行与运算 如果n最低位为1,则count++
然后flag右移一位再和n的次低位进行与运算,如果次低位是1 则count++
重复此过程直到flag移动到最高位。

public int NumberOf1(int n) {
           int flag=1;
           int count=0;
           for(int i=0;i<32;i++){
                
                if((n&flag)!=0){
                    count++;
                }
                flag=flag<<1;
            }
            return count;
}

or
将n变为二进制 然后循环判断每一位是否为1;

public int NumberOf1(int n) {
        
         String str=Integer.toBinaryString(n);
         int count =0;
        
         for(int i=0;i<str.length();i++){
             
             if(str.charAt(i)=='1'){
                 count++;
             }
         }
         
         return count;
         
     }

2.特殊解法

当一个数减去1 那个这个数最右边的1之后的0将会变成1,最右边的1左边不变,然后这个数和这个数-1进行与运算,那么这个数最右边的1将会0 循环此过程 直到这个数全部变为0;
ex: 10的二进制是 1010 10-1的二进制是1001 相与结果为1000 10这个数最右边的1变为o 以此类推
最终10会变为0

public int NumberOf1(int n) {
         int count=0;
        while(n!=0){
            n=n&(n-1);
            count++;
        }
         return count;
}
上一篇 下一篇

猜你喜欢

热点阅读