191. Number of 1 Bits
仅供自己学习
思路:
直接判断每一个位有没有1,如果有1,计数一次即可。 因为二进制每个位的关系是2^N-1,所以我们用n & (1<<i)即可判断每个位是否为1,1<<i 是将1位移i位,即把第0位的1左移i位。
代码:
1 class Solution { 2 public: 3 int hammingWeight(uint32_t n) { 4 int res=0; 5 for(int i=0;i<32;++i){ 6 if(n&(1<<i)) res++; 7 } 8 return res; 9 } 10 };
还有一种方法是通过 n&(n-1)这个式子来判断是否存在位为1.如果6=110,5=101,4=100,6&5=4,相当于这个式子可以把最低为1的位变为0,就是说每次调用这个公式1就会少一个。那么只要判断n是不是大于0,大于0就执行一次公式并计数,如果小于等于0就返回技术结果即可
1 class Solution { 2 public: 3 int hammingWeight(uint32_t n) { 4 int res=0; 5 while(n){ 6 n=n&(n-1); 7 res++; 8 } 9 return res; 10 } 11 };