leetcode 191 位1的个数

一、题目描述

二、代码实现

解法一:右移

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

cpp 复制代码
class Solution {
public:
    int hammingWeight(int n) {
        int count=0;
        for(int i=31;i>=0;i--){
            if(((n>>i)&1)==1)
                count++;
        }
        return count;
    }
};

解法二:消1

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

cpp 复制代码
class Solution {
public:
    int hammingWeight(int n) {
        int count=0;
        while(n){
            count++;
            n=n&(n-1);//消除最右边的1
        }
        return count;
    }
};