我是靠谱客的博主 如意胡萝卜,这篇文章主要介绍10.二进制中1的个数 --剑指Offer(Java版),现在分享给大家,希望可以做个参考。

 github

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

 Java中提供类库

public int NumberOf1(int n) {
        // 库函数
         return Integer.bitCount(n);
}

当然,我不推荐在面试的时候用这个,因为底层的bitCount()我愁了好久也没看懂啥意思,问到就凉了.

/**
 * 二进制中1的个数
 * <p>
 * 输入一个整数,输出该数二进制表示中1的个数。
 * 其中负数用补码表示。
 */
public class _010_NumberOf1 {
    public int NumberOf1(int n) {
        // 库函数
//         return Integer.bitCount(n);
        // 自己手写一个简单的计数器
//        return count1ByBin(n);
        // 作者推荐算法.
        // 循环次数只和二进制中的 1 的个数有关.,明显降低循环次数.
        // 循环时间与二进制中1的个数正相关。
        int count = 0;
        while (n != 0) {
            ++count;
            n = (n - 1) & n;    // 扔掉最后一位1
        }

        return count;
    }

    private int count1ByBin(int n) {
        int count = 0;
        int flag = 1;
        // 和 int 的 字节有关,可以理解为:32次循环
        while (flag != 0) {
            if ((n & flag) != 0) {
                count++;
            }
            flag = flag << 1;
        }
        return count;
    }
}

 

最后

以上就是如意胡萝卜最近收集整理的关于10.二进制中1的个数 --剑指Offer(Java版)的全部内容,更多相关10.二进制中1的个数内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(111)

评论列表共有 0 条评论

立即
投稿
返回
顶部