registro de prueba de pincel leetcode 172. Cero después de factorial

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento .

prefacio

La pregunta de ayer fue mediana. No tuve tiempo de hacer una pregunta diaria ayer. Lo compensaré hoy. La pregunta de ayer es principalmente sobre el ejercicio del pensamiento matemático. Tienes que encontrar información útil a través de la pregunta para resolver el problema. mejor.

Pregunta del día

El problema de ayer fue 172. Cero tras factorial, dificultad media

  • Dado un entero n, devuelve el número de ceros finales en el resultado n!.

  • Pista n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1

 

Ejemplo 1:

输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
复制代码

Ejemplo 2:

输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
复制代码

Ejemplo 3:

输入:n = 0
输出:0
复制代码

 

insinuación:

  • 0 <= norte <= 104

Avanzado: ¿Puedes diseñar e implementar un algoritmo en complejidad de tiempo logarítmico para resolver este problema?

responder

solución matemática

Dado que el título representa factorial, definitivamente no hay forma de usar una solución violenta para calcularlo, porque factorial puede romper fácilmente el límite superior del número, así que lo que tenemos que hacer es encontrar la ley

Antes que nada, veamos por qué 0 aparece después del factorial, y 0 aparecerá al final de cualquier número multiplicado por 10. Solo se puede multiplicar por 10 y multiplicar por 20. Se puede ver que 2*10 se multiplica por 10 en el análisis final.

imagen.png

Entonces 10 puede verse como 2 * 5, y luego tomamos un nivel 5 para demostrar: 5 * 4 * 3 * 2 * 1. Este es el nivel de 5, así que ¿cuántos ceros aparecerá? 120 es un cero porque en estos cinco números hay un par de 5 * 2. Ya sea que uses 2 * 5 o 4 * 5, al final puedes Solo haz un par, porque el número de 5 es mucho menor que el número de 2

imagen.png

Entonces, la idea aquí es clara, pedimos algunos ceros detrás del estrato, de hecho, queremos pedir algunos múltiplos de 5 en este estrato. Por ejemplo, 25 se puede descomponer en 5 * 5, que son 2 ceros. , y así sucesivamente. , necesitamos encontrar el nivel actual, hay varios números que se pueden descomponer en 5, y cuántos de ellos se pueden descomponer por separado, y luego sumarlos para obtener la respuesta requerida por la pregunta.

imagen.png

Entonces tomemos como ejemplo 125. En el factorial de 125, habrá un total de 25 múltiplos de 5 como 5, 10, 15, 20, y habrá dos 5*5, que es Un múltiplo de 25, como 25, dará dos 5, entonces un total de 5 en el factorial de 125 dará dos 5, entonces es 25 + 5. Finalmente, hay un 125, que es igual a 5 * 5 * 5. Proporcionará tres cincos, por lo que es 25 + 5 + 1, luego podemos encontrar que el factorial de 125 será seguido por 31 0s.

Luego convertimos las ideas anteriores en código.

Bucle para determinar cuánto esperará el n actual dividido por 5. La primera división por 5 es equivalente al primer cálculo de 125 anterior. Calcula cuántos números pueden dar un 5 y divide por 5 por segunda vez. 5 es para calcula el número que puede dar 2 5. Por analogía, siempre sabes que n y no se pueden dividir por 5, puedes calcular cuántos 5 se pueden dar.

/**
 * @param {number} n
 * @return {number}
 */
 var trailingZeroes = function(n) {
    let res = 0;
    while (n !== 0) {
        n = Math.floor(n / 5);
        res += n;
    }
    return res;
};
复制代码

imagen.png

Supongo que te gusta

Origin juejin.im/post/7079314136143757343
Recomendado
Clasificación