LeetCode-191-el número de bits 1 (simple)


1. Descripción

Escribe una función, la entrada es un entero sin signo, devuelve el número de dígitos en la expresión binaria de '1' (también conocido como peso de Hamming).

2. Ejemplo

Entrada: 00000000000000000000000000001011
Salida: 3
Explicación: En la cadena binaria de entrada 00000000000000000000000000001011, un total de tres bits son '1'.

Entrada: 00000000000000000000000010000000
Salida: 1
Explicación: En la cadena binaria de entrada 00000000000000000000000010000000, un total de un bit es '1'.

Entrada: 11111111111111111111111111111101
Salida: 31
Explicación: En la cadena binaria de entrada 11111111111111111111111111111101, un total de 31 bits son '1'.

rápido

  • Tenga en cuenta que en algunos lenguajes (como Java), no hay ningún tipo de entero sin signo. En este caso, tanto la entrada como la salida se designarán como tipos de enteros con signo y no deberían afectar su implementación, porque la representación binaria interna es la misma independientemente de si el entero tiene o no signo.
  • En Java, el compilador usa la notación de complemento a dos para representar enteros con signo. Por lo tanto, en el ejemplo 3 anterior, la entrada representa un entero con signo -3.

3. Análisis

Un entero positivo es 3 y su representación binaria es "0000 0011". Realice la operación 3 & (3-1) en 3, como se muestra en la siguiente tabla

operando Representación entera Representación binaria
3 0000 0011
Y 3 -1 = 2 0000 0010
= 2 0000 0010

Continúe realizando la operación 2 & (2-1) en el resultado 2 de 3 & (3-1),

operando Representación entera Representación binaria
2 0000 0010
Y 2 -1 = 1 0000 0001
= 0 0000 0000

Al observar las dos tablas anteriores, podemos sacar una conclusión preliminar: hay 2 1 en la representación binaria de 3, y después de 2 operaciones &, el resultado es 0.

Tomemos otro ejemplo de números negativos.
Un número negativo es (-125) y su representación binaria es "1000 0011".

Realice la operación (-125) y (-125-1) en (-125), el proceso se muestra en la siguiente tabla,

operando Representación entera Representación binaria
-125 1000 0011
Y -125-1 = -126 1000 0010
= -126 1000 0010

Continúe realizando la operación & en el resultado (-126) de (-125) y (-125-1), el proceso se muestra en la siguiente tabla,

operando Representación entera Representación binaria
-126 1000 0010
Y -126-1 = -127 1000 0001
= -128 (1) 1000 0000

Continúe realizando la operación & en el resultado (-128) de (-126) y (-126-1), el proceso se muestra en la siguiente tabla,

operando Representación entera Representación binaria
-128 (1) 1000 0000
Y -128-1 = -129 (1) 0111 1111
= 0 0000 0000

Observando estas tres tablas, también podemos sacar una conclusión: (-125) el binario tiene 3 1. Después de 3 operaciones &, el resultado es 0.

Conclusión:
entero nnEl número de 1 en la cadena binaria de n , igualannn & (nnn -1) El número de operaciones.

4. Código

public class Solution {
    
    
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
    
    
        int numOneBits = 0;
        while(n != 0)
        {
    
    
            n = n & (n - 1);
            ++numOneBits;
        }
        return numOneBits;
    }
}

Pero hay un código más simple:

public class Solution {
    
    
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
    
    
        return Integer.bitCount(n);
    }
}

5. Verificación

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

6. Fuente

  1. LeetCode 191. Número de bits 1
    Fuente: LeetCode
    Enlace: https://leetcode-cn.com/problems/number-of-1-bits Los
    derechos de autor son propiedad de Leetcode Network.

Supongo que te gusta

Origin blog.csdn.net/PursueLuo/article/details/108738635
Recomendado
Clasificación