LeetCode Number of 1 Bits

LeetCode 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'的个数。

没必要先把数的二进制表示求出来,只需要将数n和1相与,如果结果为1,说明最低位为1,否则最低位为0,然后不断把n向右移动,直到n为0。

完整代码如下:

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

本代码提交AC,用时3MS。

二刷。直接n&(n-1)可以去掉n中的最后一个数,所以n有多少个二进制1就运算多少次,性能更佳,代码如下:

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int ans = 0;
        while(n != 0) {
            ++ans;
            n = n & (n - 1);
        }
        return ans;
    }
}

本代码提交AC,用时2MS。

4 thoughts on “LeetCode Number of 1 Bits

  1. Pingback: LeetCode Reverse Bits | bitJoy > code

  2. Pingback: LeetCode Number of 1 Bits | nce3xin_code

  3. Pingback: LeetCode Hamming Distance | bitJoy > code

  4. Pingback: LeetCode Counting Bits | bitJoy > code

Leave a Reply

Your email address will not be published. Required fields are marked *