Demostrar la oferta de seguridad: un número binario (la operación de bit, leetcode191)

tema:

Un entero que indica el número de la salida de la binario número 1 en. En el que un número negativo indica un complemento.

El complemento de origen es un número positivo

número negativo complemento es complemento negada positivo -1

Respuesta:

Solución uno:

Sinceramente quiero escribir, escribir el resultado de un desastre, pero todavía ...... por el código es el siguiente:

public class Solution {
    public int NumberOf1(int n) {
        if(n==0){
            return 0;
        }
        //提前处理溢出
        if(n==-2147483648){
            return 1;
        }
        int count = 0;//1的数目
        boolean flag = true;
        if(n<0){
            flag = false;//负数
        }
        int target = Math.abs(n);
        while(target>0){
            if(target%2==1){
                count++;
            }
            target = target/2;
        }
        if(!flag){
            int last = n%2;
            count = (last==0)?(32-count):(32-count+1);
        }
        return count;
    }
}

Solución dos:

Bit a bit comparación, de la siguiente manera:

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        int mask = 1;
        for(int i=0;i<32;i++){
            if((n&mask)!=0){
                count++;
            }
            n = n >> 1;
        }
        return count;
    }
}

 

Solución tres:

Esta solución es realmente no hay salida ......

(Interpretación de manejar los jefes de sección comentarios)
Si un número entero distinto de cero, entonces este es un número entero de al menos 1. Si restamos el número entero 1, entonces el número entero original en el extremo derecho 1 se cambió a 0, el original se convierte en (0, entonces hay un 1 seguido si el extremo derecho) 1 en todas las 01 estará de vuelta. Todos los bits restantes no se verán afectadas.
Por ejemplo: un número binario de 1100, de la tercera a la derecha del número está en una más a la derecha 1. Después de restar 1, la tercera se convierte en 0, que más tarde se convirtió dos de 0 1 1 mientras que el frente se mantiene sin cambios, por lo que el resultado es 1011. Se encontró que los resultados de menos uno es a un más a la derecha 1 bits están empezando a tomar hacia atrás. Esta vez los resultados después del número entero original, si luego hacen con la operación y restar 1 al número entero más a la derecha originales 1 el que comenzaron todos los bits se convertirán en 0. Tal como el 1100 y 1011 = 1000. Esto puso un número entero menos 1, y luego que ver con la aritmética de enteros original, el número entero será el tope derecho 1 se convierte en 0. Entonces un entero binario de 1 cuántos, cuánto se puede veces tal operación.

Código es el siguiente:

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n!=0){
            count++;
            n = n&(n-1);
        }
        return count;
    }
}

leetcode Solución:

https://leetcode-cn.com/problems/number-of-1-bits/solution/wei-1de-ge-shu-by-leetcode/

Publicado 92 artículos originales · ganado elogios 2 · Vistas 8420

Supongo que te gusta

Origin blog.csdn.net/wyplj2015/article/details/104843446
Recomendado
Clasificación