《剑指offer》二进制中1的个数 找规律

题目描述

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

思路

这题还是要分析,规律比较难找,没有普适性,仅仅针对这一题。
任意一个二进制 如 111,让该数-1成为110,111和110相与得到110,会发现他让最右边的一位变成0.接着110-1成为101.101与110相与得到100,100-1成为011和100相与得到000结束。
可以看到规律,任意二进制-1之后的结果与二进制本身相与,会把该数的最右边的1变成0,有多少个1就做多少次与操作。

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

猜你喜欢

转载自blog.csdn.net/gsch_12/article/details/80835501