解题方案:位操作的技巧
整数 n 和 n-1(n>0) 做与运算,从其二进制形式来看,可以消掉 n 的二进制数值中最后1个 “1” 。循环进行,每次消掉1个 “1” 。整数 n 的二进制数值中有多少个 “1” ,就需要进行多少次循环。
执行用时 :4 ms, 在所有 C++ 提交中击败了83.46%的用户
内存消耗 :8.2 MB, 在所有 C++ 提交中击败了23.43%的用户
class Solution { public: int hammingWeight(uint32_t n) { int num = 0; while(n>0){ n = n&(n-1); num++; } return num; } };
执行用时 :4 ms, 在所有 C++ 提交中击败了83.46%的用户
内存消耗 :8.3 MB, 在所有 C++ 提交中击败了5.21%的用户
class Solution { public: int hammingWeight(uint32_t n) { return (n > 0) ? 1 + hammingWeight(n & (n - 1)) : 0; } };