Skip to content

15. 二进制中 1 的个数

来源

https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/

题目

请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9  表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。

示例:

示例 1.

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2.

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3.

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

思路 1

循环判断 n & 1,如果 n 的二进制是 1 结尾,返回 1,反之,返回 0,
n >>> 1,无符号右移 1 位,
由于有示例 3,js 需要用 >>>

解题 1

js
/**
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function (n) {
  let count = 0;
  while (n) {
    count += n & 1;
    n >>>= 1;
  }

  return count;
};

思路 2

循环判断 n & n - 1,消去二进制最右边的 1。

xy
n10101000
n-110100111
n & n - 110100000

时间复杂度 O(M) M 是二进制中 1 的数量

解题 2

js
/**
 * @param {number} n - a positive integer
 * @return {number}
 */
var hammingWeight = function (n) {
  let count = 0;
  while (n) {
    n &= n - 1;
    count++;
  }

  return count;
};

从零开始学算法
https://github.com/daqi/re0-algorithm/issues
欢迎 start & watch

Waiting For Your Next Big Idea