剑指offer—位运算

【牛客】二进制中1的个数

题目描述

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

思路

  1. n & n-1 会去掉n的位数表示中最低的那一位
public int NumberOf1(int n) {
        int count = 0;
        while(n != 0){
            count++;
            n &= (n - 1);
        }
        return count;
    }
  1. 先转成二进制字符串,遍历一遍统计1的个数
public int NumberOf1(int n) {
        String str = Integer.toBinaryString(n);
        int count = 0;
        for (int i = 0 ; i < str.length() ; i++){
            if(str.charAt(i) == '1')
                count++;
        }
        return count;
    }
  1. 直接上Integer.bitCount();

    原理

public int NumberOf1(int n) {
        return Integer.bitCount(n);
    }
  • 微信
  • 快加我微信吧~
  • QQ
  • 快加我QQ吧~
  • weinxin
Betterts

发表评论 取消回复

    • avatar Betterts 博主

      菜鸡