[编程题] lc [191. 位1的个数]

[编程题] lc 191. 位1的个数

题目

image-20200730142335102

输入输出

image-20200730142352476

Java代码

理解:这个题输入给的是2进制

 //方法2:输入是二进制数的
     public int hammingWeight(int n) {
         int count=0;
         while(n!=0){
             n = n&(n-1);  //这里的原理主要是n-1与上n每次会消除数n中的一个1,当n等于0了就消除完了
             count++;
         }
         return count;
     }

解释:n = n&(n-1); 这句

​ 这里的原理主要是n-1与上n每次会消除数n中的一个1,当n等于0了就消除完了。


如果本题是把一个整型的十进制数计算其中二进制的1个个数。如下

方法:求模取余

 //方法1:化为二进制的过程中计数(化二进制规则:模2取余);//这种输入是一个整形十进制.题目是给的二进制,不符合
    public int hammingWeight1(int n) {
        int count=0;
        while(n/2!=0){
            int m = n%2;
            if(m==1){count++;}
            n = n/2;
        }
        if(n%2==1){
            return count+1;
        }else{
            return count;
        }
    }

输出:

image-20200730142631844

原文地址:https://www.cnblogs.com/jiyongjia/p/13403570.html