当前位置: 代码迷 >> 综合 >> [Leetcode] Number of 1 Bits Counting Bits
  详细解决方案

[Leetcode] Number of 1 Bits Counting Bits

热度:27   发布时间:2023-12-22 08:11:15.0

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.

这题在之前参加高通面试时做过:

思路:

一、位操作,对于每一位都进行&0x1的操作:

int hammingWeight(uint32_t n) {if (n <= 0)return 0;int count = 0;while(n){count += (n & 0x1);n = n >> 1;        }      return count;
}

二、总结规律(从Editorial中学到):

将一个数N写成二进制来看,其最低位为1的位和该数减去1(即N-1)后的0 bit位是一一对应的,因此将数N与N-1得到的结果是将N的最低位1置为0,其他位保持不变,这样循环地进行与的操作,直到N为零时,则知道没有剩余的1 bit了:

int hammingWeight(uint32_t n) {int count = 0;while (n != 0) {count++;n &= (n - 1);}return count;
}

扩展:

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.

Example:
For num = 5 you should return [0,1,1,2,1,2].

int* countBits(int num, int* returnSize) {if (num < 0){*returnSize = 0;return NULL; }int i; int *retArray = malloc(sizeof(int) * (num + 1));for(i = 0; i <= num; i ++){retArray[i] = hammingWeight(i);}*returnSize = i;return retArray;
}

  相关解决方案