【 每天学习一点算法 2026/01/19】位1的个数

每天学习一点算法 2026/01/19

题目:位1的个数

给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。

  1. 最容易想到的方法就是,遍历二进制字符串,统计 1 的个数(找 1 怎么感觉怪怪的)

    typescript 复制代码
    function hammingWeight(n: number): number {
      const str = n.toString(2)
      let count = 0
      for (let i of str) {
        if (i === '1') count++
      }
      return count
    };
  2. 我们还有一种取巧的方法,js 字符串的 split 方法,可以分割字符串,如果们使用 1 分割字符串,那么结果数组长度减一就是 1 的个数

    复制代码
    function hammingWeight(n: number): number {
      const str = n.toString(2)
      return str.split('1').length - 1
    };
  3. 我们知道二进制是满二进一,那么二进制运算 n - 1 就是讲最右侧的 1 变成 0,让后讲这个 1 右侧的 0 变成 1,然后我们对 n 和 n - 1 进行 & 运算

    按位与(&)的规则是:只有对应位都为 1 时,结果才为 1,否则为 0。

    所以 n & (n - 1) 的结果就会将最右侧的 1 变成 0,我们循环执行 n = n & (n - 1) 直到 n 变成 0,循环次数就是 1 的个数

    typescript 复制代码
    function hammingWeight(n: number): number {
      let count = 0
      while (n) {
        n &= (n - 1)
        count++
      }
      return count
    };

题目来源:力扣(LeetCode)

相关推荐
代码山河8 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
释厄6238 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
UIU11410 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场10 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi10 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David11 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院12 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
小嘉丶学长12 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
niyongsheng13 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
小李不想当小白13 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式