每天学习一点算法 2026/01/19
题目:位1的个数
给定一个正整数
n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。
-
最容易想到的方法就是,遍历二进制字符串,统计 1 的个数(找 1 怎么感觉怪怪的)
typescriptfunction hammingWeight(n: number): number { const str = n.toString(2) let count = 0 for (let i of str) { if (i === '1') count++ } return count }; -
我们还有一种取巧的方法,js 字符串的 split 方法,可以分割字符串,如果们使用 1 分割字符串,那么结果数组长度减一就是 1 的个数
function hammingWeight(n: number): number { const str = n.toString(2) return str.split('1').length - 1 }; -
我们知道二进制是满二进一,那么二进制运算
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 的个数typescriptfunction hammingWeight(n: number): number { let count = 0 while (n) { n &= (n - 1) count++ } return count };
题目来源:力扣(LeetCode)