美文网首页
[剑指offer][Java]二进制中1的个数

[剑指offer][Java]二进制中1的个数

作者: Maxinxx | 来源:发表于2019-06-19 17:05 被阅读0次

    题目

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

    程序核心思想

    如果一个整数不是0,那么它的二进制一定至少有一位为1。如果把这个整数减一,会把右边数第一个1变为0,并且把这个1右边的所有0变为1。接着把这两个数做与运算,那么除了这个1以及这个1右边的所有数会变为0,其余位数不变。

    举个栗子,110101000,减一之后为:110100111,做与运算之后为:110100000

    这个数就变小了,在重复上述步骤:
    减一之后为:110011111,做与运算之后为:110000000
    减一之后为:101111111,做与运算之后为:100000000
    减一之后为:011111111,做与运算之后为:000000000

    所以每一步都会从最右开始,把一个1变成0,有几个1就会做几次,直到这个数变成0为止。

    Tips

    代码

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

    相关文章

      网友评论

          本文标题:[剑指offer][Java]二进制中1的个数

          本文链接:https://www.haomeiwen.com/subject/xowkqctx.html