首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Javascript的1位数

具有Javascript的1位数
EN

Stack Overflow用户
提问于 2021-11-28 20:53:35
回答 2查看 863关注 0票数 1

问题:编写一个函数,该函数接受一个无符号整数,并返回它拥有的'1‘位数(也称为Hamming重量)。

示例1

输入:n = 00000000000000000000000000001011

输出:3

说明:输入二进制字符串00000000000000000000000000001011共有三个'1‘位。

我的代码

代码语言:javascript
复制
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;
    }
};

测试用例

代码语言:javascript
复制
00000000000000000000000000001011
00000000000000000000000010000000
11111111111111111111111111111101

预期输出

代码语言:javascript
复制
3
1
31

输出

代码语言:javascript
复制
1
0
1

我的代码做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-28 21:05:02

你在这里有几个问题:

1.循环中,您正在重新定义countmask。在循环的第一次迭代之后,

  • return,而不是等待整个循环的计数。

  • ,如果是bit,则只移动mask

以下是一个修正后的函数:

代码语言:javascript
复制
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;
};
票数 3
EN

Stack Overflow用户

发布于 2021-11-28 21:46:30

写这篇文章的一个较短的方法可以是:

代码语言:javascript
复制
const hammingWeight = value => [...value].filter(f => f == 1).length;

解释:

[...value],这将根据您的字符串创建一个0和1的数组。

.filter(f => f == 1)将过滤数组,只保留1个值

.length给出过滤数组的长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70147375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档