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

相关推荐
We་ct1 天前
LeetCode 136. 只出现一次的数字:线性时间+常量空间最优解拆解
前端·算法·leetcode·typescript·位运算
tankeven1 天前
HJ161 走一个大整数迷宫
c++·算法
VelinX1 天前
【个人学习||ollama】安装和使用
学习
二宝1521 天前
如何高效学习与实用技巧分享
学习·效率·技巧
kishu_iOS&AI1 天前
机器学习 —— KNN算法(模型算法)
人工智能·算法·机器学习
灰色小旋风1 天前
力扣移除元素C++
数据结构·c++·算法·leetcode
样例过了就是过了1 天前
LeetCode热题100 数组中的第K个最大元素
数据结构·c++·算法·leetcode·排序算法
lightqjx1 天前
【前端】前端学习二之CSS
前端·css·学习·html
17(无规则自律)1 天前
【算法对比】连续子区间的两种控制逻辑:Kadane和滑动窗口
数据结构·c++·算法·动态规划
y = xⁿ1 天前
【LeetCodehot100】:贪心算法:T121:买卖股票最佳时机 T55:跳跃游戏 T45:跳跃游戏2
算法·游戏·贪心算法