題目描述
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。
題目思路
該題一開始就認為什麼簡單,沒想到入坑了,原因是該解法如果輸入時負數會陷入死循環,
因為負數右移時,在最高位補得是1,而本題最終目的是求1的個數,那麼會有無數個
入坑代碼
public class Solution {
public int NumberOf1(int n) {
int cnt = ;
while(n!=)
{
if(n&)
cnt++;
n>>;
}
return cnt;
}
}
代碼
class Solution {
public:
int NumberOf1(int n) {
int cnt = ;
while(n)
{
n=n&(n-);
cnt++;
}
return cnt;
}
};
public class Solution {
public int NumberOf1(int n) {
int cnt = ;
while(n!=)
{
n = n&(n-);
cnt++;
}
return cnt;
}
}
總結
對于一眼就能看出的題,往往需要進行全面的分析,是不是隻看到局部