HJ15 求int型正整数在内存中存储时1的个数

72 阅读1分钟

Problem: HJ15 求int型正整数在内存中存储时1的个数

题目描述

描述

输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。

数据范围:保证在 32 位整型数字范围内

输入描述:

输入一个整数(int类型)

输出描述:

这个数转换成2进制后,输出1的个数

示例1

输入:5
输出:2

解题思路

使用位运算来解决

算法流程

  1. 初始化一个变量 count,用于记录 1 的个数。
  2. 利用位运算的特性进行循环操作:
    • 如果整数 n 不为 0,执行以下操作:
      - 判断 n & 1 是否为 1,如果是,则说明最低位为 1,将 count 加一。
      - 将 n 右移一位(相当于 n 除以 2)。
  3. 返回 count,即为整数在内存中存储时 1 的个数。

代码

function countSetBits(num) {
    let count = 0;
    while(num){
        if(num & 1) count++;//判断最低位是否为1
        num >>= 1;//右移1位
    }
    return count
}

复杂度

  • 时间复杂度:

时间复杂度: O(n)O(n)

  • 空间复杂度:

空间复杂度: O(1)O(1)