Java每日一道算法--请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数

Posted lovoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java每日一道算法--请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数相关的知识,希望对你有一定的参考价值。

题目:

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。
示例 2:

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 ‘1’。
示例 3:

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 ‘1’。

提示:

输入必须是长度为 32 的 二进制串 。

来源:力扣(LeetCode)

解法1:

使用java自带的函数

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

解法2:

使用 & 符, 两个操作数中位都为1,结果才为1,否则结果为0

public static int hammingWeight2(int n) {
        int count = 0;
        while (n != 0){
            count ++;
            n = n & (n -1);
        }
        return count;
    }

解析:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

解法3:

使用>>>=符, 右移赋值,左边空出的位以0填充

 public static int hammingWeight3(int n) {
        int count = 0;
        while (n != 0) {
            if ((n & 1) == 1) {
                count++;
            }
            n >>>= 1;
        }
        return count;
    }

以上是关于Java每日一道算法--请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数的主要内容,如果未能解决你的问题,请参考以下文章

每日一道算法题04:重建二叉树

每日一道算法题--两数之和

一道算法

每日算法练习

每日算法练习

每日算法练习