Ensayo de Hangout de Leetcode

Hoy, mi compañero de clase presentó un sitio web de preguntas de cepillado para entrevistas en el extranjero, similar a los nueve grados nacionales, llamado Leetcode (los zapatos de los niños para encontrar un trabajo pueden ir de compras), deambulé e hice una pregunta, las preguntas son las siguientes:
dado un número entero no negativo num. Para cada número i en el rango 0 ≤ i ≤ num calcule el número de 1 en su representación binaria y devuélvalos como una matriz. La
idea general es encontrar el número de 1 en los números binarios de 0 a n. La idea general de resolver el problema es agrupar la matriz solicitada y dividir los dígitos binarios convertidos en el mismo grupo, como 2, 3 grupos, 4, 5, 6, 7 grupos, etc., principalmente para obtener la agrupación El número del elemento de encabezado de grupo, como 2, 4, 4, etc. Luego puede obtener el número de 1s en el número binario agrupado actual por el número de 1s en el número binario previamente agrupado, como 2, 4 y 8. . . El número de 1 en el binario convertido es 0 más el número de 1 en el binario convertido, 1, 3, 5 y 9. . . El número de 1 en el binario convertido es 1 más 1 en el binario convertido, y así sucesivamente. El número de 1 en el binario convertido actualmente se puede obtener sumando 1 al número obtenido previamente. El código publicado es el siguiente:

public class Solution {
    public int[] countBits(int num) {
        int st1=2;
        int st2=2;
        int[] ret=new int[num+1];
        ret[0]=0;
        if(num>0) ret[1]=1;
        for(int i=2;i<=num;i++){
            if(i/st1==1){
                st2=st1;
                st1=st1*2;
            }
             if(i<st1) ret[i]=ret[i-st2]+1;

        }
        return ret;
    }
}

La imagen muestra el resultado después del envío.
Los resultados muestran

10 artículos originales publicados · Me gusta2 · Visitas 1928

Supongo que te gusta

Origin blog.csdn.net/yuhao22/article/details/51028993
Recomendado
Clasificación