Andy Back-end Dev Engineer

剑指offer-二进制中 1 的个数

2018-06-26

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

解体思路

1.使用Integer.bitCount() 方法

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

2.n&(n-1) O(logM)时间复杂度,M表示1的个数 该位运算是去除n的位级表示的最低的以为

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

相关代码:

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

Comments

Content