位1的个数
给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。
示例 1:
codeType
输入:n = 11
输出:3
解释:输入的二进制串 1011 中,共有 3 个设置位。
示例 2:
codeType
输入:n = 128
输出:1
解释:输入的二进制串 10000000 中,共有 1 个设置位。
示例 3:
codeType
输入:n = 2147483645
输出:30
解释:输入的二进制串 1111111111111111111111111111101 中,共有 30 个设置位。
提示:
- 1 <= n <= 231 - 1
进阶:
如果多次调用这个函数,你将如何优化你的算法?
解法
ts
function hammingWeight(n: number): number {
let res = 0
for(let i = 0; i < 32 && n > 0; i++){
// 获取最后一位
let lastNum = n & 1
// 判断这位是不是1,这样写主要是可读性更好
res += lastNum === 1 ? 1 : 0
// n向右移动一位
n = n >>> 1
}
return res
};