力扣191. 位1的个数(位运算)

Problem: 191. 位1的个数

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

力扣191. 位1的个数(位运算)_第1张图片力扣191. 位1的个数(位运算)_第2张图片

思路

题目规定数值的范围不会超过32位整形数

1.定义统计个数的变量oneCount;由于每次与给定数字求与的变量mask初始化为1
2.for循环从0~32,每一次拿mask与给定数字求与运算,若不为0则表示当前二进制位为1,oneCount++;
3.给定数字右移一位

复杂度

时间复杂度:

O ( 1 ) O(1) O(1)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

class Solution {
public:
    /**
     * Bit operation
     * @param n Unsigned integer to be operated
     * @return int
     */
    int hammingWeight(uint32_t n) {
        int oneCount = 0;
        int mask = 1;
        for (int i = 0; i < 32; ++i) {
            if ((n & mask) != 0) {
                oneCount++;
            }
            mask <<= 1;
        }
        return oneCount;
    }
};

你可能感兴趣的:(力扣题目,leetcode,算法,职场和发展)