秋風氣爽第二刷|如何數出一個數二進制后有多少個1?

今日第二刷

洗刷刷洗刷刷~~
今天碰到了小妞兒之前推薦我做的“如何數出一個數二進制后有多少個1?”這道題的原始來頭,這是簡單版本。

這是我遇到的第一個沒有Run Code按鈕的題

However,這道題初級,卻連個‘runcode’按鈕都沒有了,我的submission記錄都沒有=。=好神奇
盲提交了第三次AC。第一次解法復制。第二次忘記了return。第三次AC。

題目:

191. Number of 1 Bits

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.

解法1:mine

與1進行二進制“與”操作,逐漸數出1的個數。

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int ans = 0;
        while(n){
            ans += (n & 1) ? 1 : 0;
            n = n >> 1;
        }
        return ans;
    }
};

解法2:Solution提供

通過發現的一個小規律解決:
通過n&(n-1)這個操作,可以把n還原到最后一個1的原始狀態。相當于減掉最右面的1。直到你把所有的1減沒了為止!
真是神奇的二進制規律?。?!

n與n-1的秘密.png
public int hammingWeight(int n) { 
      int sum = 0; 
      while (n != 0) { 
               sum++; 
               n &= (n - 1); 
      }
      return sum;
}

受教了!
——End——

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容