今日第二刷
洗刷刷洗刷刷~~
今天碰到了小妞儿之前推荐我做的“如何数出一个数二进制后有多少个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减没了为止!
真是神奇的二进制规律!!!
public int hammingWeight(int n) {
int sum = 0;
while (n != 0) {
sum++;
n &= (n - 1);
}
return sum;
}
受教了!
——End——