如题,使用一个结论:
一个二进制数减1后与原数进行&运算会消去原二进制数中最右边的1(即 n&=n-1)
举个例子:
比如说有个二进制数1100 减1 变为 1011
1011 & 1100 = 1000 这样就消去了最右边的1
下面给出代码
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while (n) {
n &= n - 1;
++count;
}
return count;
}
};
二进制数中连续1的最大个数链接 点击↑