您的位置 首页 java

剑指offer(十一)-二进制中1的个数(Java版)

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

示例1

输入:10

返回值:2

首先我们学习一下几个常用 运算符

第一种解法,我们可以每次判断num转换为二进制数的最后一位数是否为1,然后依次右移即可,代码如下

 public int firstNumberOf1(int n) {
       int sum = 0;
       for (int i= 0; i < 32;i++){
           int result = n & 1;
           sum += result;
           n = n >> 1;
       }
        return sum;
    }  

第二种解法,上面我们理解了&运算符的含义,利用n & n-1

用10来作为例子,10 & 9 ,10的二进制为1010,9的二进制为1001,10&9 = 1010&1001=1000 = 8,这个时候刚好把最右边的1消去,只要&不为零,依次判断即可

 public int secondNumberOf1(int n) {
        int sum = 0;
        while (n != 0){
            sum++;
            n &= n-1;
        }
        return sum;
    }  

第三种解法,熟悉Java Integer对象方法的同学,可以知道 Integer .bitCount(n)方法,此方法就是计算 统计二进制中1的个数,代码如下

 public int thirdNumberOf1(int n) {
        return Integer.bitCount(n);
    }  

文章来源:智云一二三科技

文章标题:剑指offer(十一)-二进制中1的个数(Java版)

文章地址:https://www.zhihuclub.com/181586.shtml

关于作者: 智云科技

热门文章

网站地图