【 每天学习一点算法 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)

相关推荐
ai产品老杨2 分钟前
明火识别算法接入AI视频分析平台全流程与误报优化指南(附接口字段与排查表)
人工智能·算法·音视频
讨厌吃蛋黄酥5 分钟前
📚408数据结构|最短路径算法一篇彻底搞懂!BFS、Dijkstra、Floyd别再傻傻分不清了
算法
web行路人26 分钟前
AI 全栈学习之旅 - Week4:容器化部署与生产环境实战
python·学习
翻身的咸鱼ing29 分钟前
ArkTS 学习笔记
笔记·学习
程序猿炎义33 分钟前
【llm-algo-leetcode学习笔记】训练侧显存优化
人工智能·笔记·学习
动词ing34 分钟前
【学习笔记】数据结构(数组滑动窗口+无重复字符的最长字串题目)
数据结构·笔记·学习
Escalating_xu41 分钟前
【C++ string 上篇】从字符串基础到容量管理、迭代器与经典算法题
java·c++·算法
田径他爸来了1 小时前
嵌入式学习第32天(同时多个用户访问的服务器)
运维·服务器·学习
Keven_111 小时前
算法札记:ACM中将高精度算法融于题目的模板
算法·acm·精度
小七在进步1 小时前
数据结构:快速排序
数据结构·算法·排序算法