JZ11- 二进制中1的个数

二进制中1的个数

https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while (n != 0) {
            if ((n & 1) == 1) {  //按位与 1的二进制为0000001。所有前面不管是0/1,结果都为0.。。所有只需要看该数的最后一位是0还是1
                count++;
            }
            n >>= 1;
        }
        return count;
    }

    public int NumberOf12(int n) {
        int count = 0;
        int mark = 1;
        while (mark != 0) {  //mark!=0 会一直循环,mark一直x2,直到超过限制变成负数。。。
                     // mark <= n 不能判断复数。只需要mark小于等于即可,可以判断1001的最左一位 1001 & 1000
            if ((mark & n) != 0) {
                count++;
            }
            mark <<= 1;
            System.out.println(mark);
        }
        return count;
    }

    public int NumberOf13(int n) {
        int count = 0;

        while (n != 0) {
            n = n & (n - 1);  //思路:把一个整数减去1再和原整数与,就会把整数最右边一个1变成0
                                // 1001 1000 -1 = 1001 0111 (最后一个1->0,后面的0->1)正好 1000 % 0111 = 0.。。直接把最后一个1消去
            count++;
        }
        return count;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务