今日第二刷
洗刷刷洗刷刷~~
今天碰到了小妞兒之前推薦我做的“如何數出一個數二進制后有多少個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——