JavaScript LeetCode 第191题:位1的个数 解题思路及方法

题目:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量

解题思路:

  • 要求结果为统计二进制数中1的个数,那么我就每次让其中的一个1变为0,然后统计次数,直到所有的1变为0为止。
  • 要实现每次让其中的1个1变为0可以利用&运算, n &= n-1 (n为传入的二进制数)
  • 要让代码一直执行直到所有的0变为1,可以利用while(n) ;当n 中1的都变为0时停止循环

下面实战开始! 

代码讲解:

var hammingWeight = function(n) {}

首先定义一个函数;参数n为需要传入的二进制数。

var sum = 0; 

 用来统计二进制数中1的个数。

while(n){
        n &= n-1;
        sum++
    }

while(n):当n为真(true)时while会一直执行,直到n为假(false)时才停止;所以当n的所有1都变为0时,才会终止。

n &= n-1:很多人会对这句代码不理解,说明你对&运算不了解,希望下面的代码对你有所帮助,若还不理解,建议百度一下。

式子n&=(n-1)同理为n=n&(n-1)

&表示“与”,例如n=11110 ,则n-1=11101

相与之后:11100

n&(n-1)所表示的含义为:将最后一位1变成0

然后统计循环的次数也就是1的个数:

 sum++ :每次循环加1;统计1的个数

最后把需要的结果sum return出去就可以了

return sum

 下面对代码进行测试:

测试代码:

var hammingWeight = function(n) {
    var sum = 0;
    while(n){
        n &= n-1;
        sum++
    }
    return sum
};
var str = 011101;
console.log(hammingWeight(str))

测试结果为 :4 ;答案正确。

 *注意:你测试的二进制数要以0开头,不然会默认为十进制的数;或者你把它转化为二进制数

 本次文章到这里也就结束了,解题的方法不唯一,这只是其中的一种,还有更多的方法等着你去探索,若有错误之处,还请见谅并指出,谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值