题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目思路
该题一开始就认为什么简单,没想到入坑了,原因是该解法如果输入时负数会陷入死循环,
因为负数右移时,在最高位补得是1,而本题最终目的是求1的个数,那么会有无数个
入坑代码
public class Solution {
public int NumberOf1(int n) {
int cnt = 0;
while(n!=0)
{
if(n&1)
cnt++;
n>>1;
}
return cnt;
}
}
代码
class Solution {
public:
int NumberOf1(int n) {
int cnt = 0;
while(n)
{
n=n&(n-1);
cnt++;
}
return cnt;
}
};
public class Solution {
public int NumberOf1(int n) {
int cnt = 0;
while(n!=0)
{
n = n&(n-1);
cnt++;
}
return cnt;
}
}
总结
对于一眼就能看出的题,往往需要进行全面的分析,是不是只看到局部