leetcode-191:位1的个数

简介: leetcode-191:位1的个数

题目

题目链接

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2:

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3:

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

解题

方法一:常规解法

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res=0;
        for(int i=0;i<32;i++){
            res+=((n>>i)&1);
        }
        return res;
    }
};

方法二:lowbit解法

i&-i返回的就是最低位的值,比如(14)的二进制1110,那么它的lowbit为2 ,因为二进制10对应的值为2

这样,对于1110,仅需要3次遍历即可,而如果采用常规做法,要32次。

class Solution {
public:
    int hammingWeight(uint32_t n) {
        int res=0;
        for(uint32_t i=n;i!=0;i-=(i&-i)) res++;
        return res;
    }
};


相关文章
|
6月前
|
算法 测试技术
LeetCode-1004. 最大连续1的个数 III
LeetCode-1004. 最大连续1的个数 III
|
6月前
leetcode-485:最大连续1的个数
leetcode-485:最大连续1的个数
46 0
【剑指offer】-最小K个数-28/67
【剑指offer】-最小K个数-28/67
|
6月前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
86 1
|
4月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
32 0
|
6月前
|
算法
【力扣】191.位 1 的个数
【力扣】191.位 1 的个数
|
6月前
【力扣】485.最大连续 1 的个数
【力扣】485.最大连续 1 的个数
|
6月前
|
C语言
leetcode:191. 位1的个数
leetcode:191. 位1的个数
25 0
|
6月前
牛客网-最小的k个数
牛客网-最小的k个数
30 0
Leetcode——485. 最大连续 1 的个数
文章目录 1、题目 2、滑动窗口 3、一次遍历(官方题解)
Leetcode——485. 最大连续 1 的个数