剑指offer[11]——二进制中1的个数
发布日期:2021-05-13 01:00:28 浏览次数:15 分类:博客文章

本文共 420 字,大约阅读时间需要 1 分钟。

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

二进制之间的与运算在JS中可以使用&符号,在这里我们思考一个问题,10的二进制为1010,当我把5减去1时,其二进制从右往左数第一个1会变为0,这个1右边所有的0会取反变为1,例如:

\[1010-1=1001\]

如果我们把5的二进制与其减去1的二进制进行与操作的话,5的二进制从左往右数第一个1及其右边的所有数字都会变成0,如下:

\[1010\&1001=1000\]

从运算结果来看,进行与操作之后比之前少了一个1,其实我们可以推论得知,其二进制有多少个1就可以进行多少次这样的操作,说到这里大家应该可以明白了,算法如下:

function NumberOf1(n){    let count = 0;    while(n != 0){        count++;        n = n&(n-1)    }    return count;}
上一篇:剑指offer[12]——数值的整数次方
下一篇:剑指offer[10]——矩形覆盖

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月09日 04时32分17秒