算法题:8、二进制中1的个数

题目描述

输入一个整数,输出该数二进制中表示1的个数

解题思路

利用技巧 n&(n-1),该位运算去除n的位级表示中最低的那一位。

n            :10110100
n-1          :10110011
n&(n-1)      :10110000

时间复杂度O(M),其中M表示1的个数。

代码

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

也可以直接使用jdk里的Integer.bitCount()

public int NumberOf1(int n) {
    return Integer.bitCount(n);
}
posted @ 2020-05-10 19:09  挣扎一下  阅读(179)  评论(0编辑  收藏  举报