问题:编写一个函数,该函数接受一个无符号整数,并返回它拥有的'1‘位数(也称为Hamming重量)。
示例1
输入:n = 00000000000000000000000000001011
输出:3
说明:输入二进制字符串00000000000000000000000000001011共有三个'1‘位。
我的代码
var hammingWeight = function(n) {
for (i=0; i<32; i++) {
var mask = 1;
var count = 0;
if ((mask & n) != 0 ) {
mask <<= 1;
count++;
}
return count;
}
};测试用例
00000000000000000000000000001011
00000000000000000000000010000000
11111111111111111111111111111101预期输出
3
1
31输出
1
0
1我的代码做错了什么?
发布于 2021-11-28 21:05:02
你在这里有几个问题:
在1.循环中,您正在重新定义count和mask。在循环的第一次迭代之后,
return,而不是等待整个循环的计数。
mask。以下是一个修正后的函数:
var hammingWeight = function(n) {
var count = 0;
var mask = 1;
for (i=0; i<32; i++) {
if ((mask & n) != 0 ) {
count++;
}
mask <<= 1;
}
return count;
};发布于 2021-11-28 21:46:30
写这篇文章的一个较短的方法可以是:
const hammingWeight = value => [...value].filter(f => f == 1).length;解释:
[...value],这将根据您的字符串创建一个0和1的数组。
.filter(f => f == 1)将过滤数组,只保留1个值
.length给出过滤数组的长度。
https://stackoverflow.com/questions/70147375
复制相似问题