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。
Pingback: LeetCode Reverse Bits | bitJoy > code
Pingback: LeetCode Number of 1 Bits | nce3xin_code
Pingback: LeetCode Hamming Distance | bitJoy > code
Pingback: LeetCode Counting Bits | bitJoy > code