天天看點

【newCoder】劍指Offer_程式設計題 二進制中1的個數

題目描述

輸入一個整數,輸出該數二進制表示中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;
    }
}
           

總結

對于一眼就能看出的題,往往需要進行全面的分析,是不是隻看到局部