cv_gordon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

解题方案:位操作的技巧

整数 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;
    }
};

 

posted on 2019-08-31 15:08  cv_gordon  阅读(181)  评论(0编辑  收藏  举报