您的位置:首页 > 其它

Leetcode(191)之位1的个数

u3860932 2020-01-04 18:11 531 查看

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

题目描述:

解题思路:

如果将n和n-1进行与运算,如果n的最后一位是1,那么n-1的最后一位必是0,且前面的位数都与n相同,那么一次与运算会减少一个1;如果n的最后一位是0,那我们找到n最后一个为1的位数,n-1在这位会是0,而这位之后的位数都是11(假如n的最后几位是1000,100,10,那么n-1的最后几位会是0111,011,01),那么一次与运算也会减少一个1。所以就一直将n与n-1作与运算,直到n为0就行了。

代码:

public int hammingWeight(int n)
{
int sum = 0;
while (n != 0)
{
sum++;
n &= (n - 1);
}
return sum;
}
标签: