【 每天学习一点算法 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,然后我们对 nn - 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)

相关推荐
鱼很腾apoc1 小时前
【学习篇】第20期 超详解 C++ 多态:从语法规则到底层原理
java·c语言·开发语言·c++·学习·算法·青少年编程
小许同学记录成长3 小时前
三维重建技术文档
算法·无人机
子繁~~3 小时前
AI工具学习
学习
小O的算法实验室4 小时前
2026年ASOC,基于多目标优化去噪双存档进化算法+路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
Terrence Shen4 小时前
Claude Code Harness 源码学习讲义
linux·学习·ubuntu
2601_954526755 小时前
逆向解析Temu底层动销算法:基于API高并发轮询与全域存量透视的自动化架构重构
算法·架构·自动化
Σίσυφος19005 小时前
数据标准化(拟合的时候使用非常重要)
人工智能·算法
knight_9___5 小时前
大模型project面试7
人工智能·python·算法·面试·大模型·agent
南境十里·墨染春水5 小时前
守护进程编程流程
linux·学习