题目链接

牛客网

题目描述

输入一个整数,输出该数二进制表示中 1 的个数。

解题思路

n&(n-1) 位运算可以将 n 的位级表示中最低的那一位 1 设置为 0。不断将 1 设置为 0,直到 n 为 0。时间复杂度:O(M),其中 M 表示 1 的个数。

15. 二进制中 1 的个数 - 图1

  1. public int NumberOf1(int n) {
  2. int cnt = 0;
  3. while (n != 0) {
  4. cnt++;
  5. n &= (n - 1);
  6. }
  7. return cnt;
  8. }