leetcode 191 位1的个数
求的是一个32位的二进制数中1的个数,简单的方法是不断的将一个1向左移位,然后与当前的n进行与运算,只有这一位是1时,运算结果才会不是0,于是加一。
当然还有更好的办法,就是n & n-1这个做法,这个运算会把n的最低一位的1翻转为0,也就是说,如果不断重复这个运算,最终n就会变成0,运算的次数自然就是1的个数,贴代码
class Solution { public: int hammingWeight(uint32_t n) { int good = 0; while(n) { n &= (n-1); good++; } return good++; } };

浙公网安备 33010602011771号