Javascript-625-Factorización mínima —— Banco de preguntas de la entrevista Tencent

Índice de problemas (máximo 5): ⭐

Titulo

Dado un número entero positivo a, para encontrar el menor entero positivo btal que bel número de bits por multiplicar todos exactamente iguales a.

Si no existe tal resultado o el resultado no es un entero con signo de 32 bits, devuelva 0.

Muestra 1

Ingrese:

48 

Salida:

68

Muestra 2

Ingrese:

15

Salida:

35

Guía original de preguntas de LeetCode

Consejos:

"No hay tal resultado" Hay un caso en el que el entero dado contiene un factor primo mayor que 10, no se olvide de juzgar

Solución

Podemos comenzar desde el dígito más bajo (un dígito) para enumerar las respuestas, intente poner los dígitos en los dígitos pequeños lo más grande posible.

Entonces comenzamos a enumerar desde el bit más bajo y seguimos poniendo 9 hasta que a no se pueda dividir entre 9, es decir, a se puede expresar como a = a0 * 9 ^ t y t es lo más grande posible. Luego, seguimos poniendo 8 hasta que a0 no puede ser divisible por 8, seguimos poniendo 7 hasta que a0 no puede ser divisible entre 7, y así sucesivamente. Este método codicioso es esencialmente el mismo que la estrategia de búsqueda de profundidad primero, excepto que la respuesta final se encuentra directamente, evitando búsquedas innecesarias.

Análisis de complejidad.

Complejidad del tiempo: O (log a), después de factorizar un número, se puede expresar como máximo como el producto del número O (log a).

Complejidad espacial: O (1).

Implementación de Javascript

/**
 * @param {number} a
 * @return {number}
 */

var smallestFactorization = function (a) {
    result = [];
    // 10以下的直接返回本身
    if (a < 10) {
        return a;
    }
    // 太大舍弃
    else if (a > 2 ** 31) {
        return 0;
    }
    let k = 9;
    while (a > 1 && k > 1) {
        if (a % k === 0) {
            a = a / k;
            result.unshift(k);
            // k = 9; k不需要重置为9,因为每次都是贪心策略,大于当前k的值已经无法被a整除
            continue;
        }
        else {
            k--;
        }
    }
    result = Number(result.join(''));
    // 判断因式是否有大于10的质数
    if (result > 2 ** 31 || a >= 10) return 0;
    return result;
};
console.log(smallestFactorization(22));
console.log(smallestFactorization(15));

Experiencia

Recientemente en el trabajo de pasantía front-end, el sistema js aprendió un poco y luego transfirió decisivamente python a js. js todavía es fragante, todas las funciones de conversión están fácilmente disponibles.

Función de conversión utilizada:

El resultado de almacenamiento se agrega desde el encabezado de la matriz en orden a partir de un solo dígito-unshift ()

Elimine la coma entre cada elemento de la matriz y conviértala en un string-join ()

Convertir cadena en número-Número ()

Supongo que te gusta

Origin www.cnblogs.com/zhoujiayingvana/p/12681761.html
Recomendado
Clasificación