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

题目链接:

JZ11 二进制中1的个数

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

本题思路:

public class Solution {
     
    public int NumberOf1(int n) {
     
        // 巧用n&(n−1)
        //     n   = 001100
        //     n-1 = 001011
        // n&(n−1) = 001000 消掉了最右边的1
        int res = 0;
        while(n != 0) {
     
            res++;
            n &= n - 1;
        }
        return res;
    }
}

你可能感兴趣的:(剑指offer刷题实录,leetcode,java,算法)