PisecesPeng / PisecesPeng.record.me

:beach_umbrella: All things are difficult before they are easy
MIT License
3 stars 1 forks source link

位1的个数 #34

Closed PisecesPeng closed 3 years ago

PisecesPeng commented 3 years ago

位1的个数

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

提示: 请注意, 在某些语言(如 Java)中, 没有无符号整数类型.
在这种情况下, 输入和输出都将被指定为有符号整数类型, 并且不应影响您的实现,
因为无论整数是有符号的还是无符号的, 其内部的二进制表示形式都是相同的.
Java中, 编译器使用二进制补码记法来表示有符号整数.
因此, 在下面的示例3中, 输入表示有符号整数-3.

进阶:
如果多次调用这个函数, 你将如何优化你的算法?

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

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

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

提示:
输入必须是长度为32的 二进制串 .


题目地址: https://leetcode-cn.com/problems/number-of-1-bits/

PisecesPeng commented 3 years ago

解题思路

代码

public static int func(int n) {
    int count = 0;
    for (char c : String.valueOf(n).toCharArray())
        if ('1' == c) count++;
    return count;
}
PisecesPeng commented 3 years ago

LeetCode题解

解题思路

代码

public static int func(int n) {
    int ret = 0;
    for (int i = 0; i < 32; i++) {
        if ((n & (1 << i)) != 0) {
            ret++;
        }
    }
    return ret;
}
PisecesPeng commented 3 years ago

LeetCode题解

解题思路

代码

public static int func(int n) {
    int ret = 0;
    while (n != 0) {
        n &= n - 1;
        ret++;
    }
    return ret;
}
PisecesPeng commented 3 years ago

LeetCode题解

解题思路

代码

public static int func(int n) {
    int ret = 0;
    while (n != 0) {
        n &= n - 1;
        ret++;
    }
    return ret;
}