秋风气爽第二刷|如何数出一个数二进制后有多少个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减没了为止!
真是神奇的二进制规律!!!

秋风气爽第二刷|如何数出一个数二进制后有多少个1?_第1张图片
n与n-1的秘密.png
public int hammingWeight(int n) { 
      int sum = 0; 
      while (n != 0) { 
               sum++; 
               n &= (n - 1); 
      }
      return sum;
}

受教了!
——End——

你可能感兴趣的:(秋风气爽第二刷|如何数出一个数二进制后有多少个1?)