我是靠谱客的博主 如意胡萝卜,最近开发中收集的这篇文章主要介绍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的个数 --剑指Offer(Java版)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部