Categorías
Algorithms

LeetCode – Número súper feo (Java)

Escribe un programa para encontrar el enésimo número súper feo.

Los números súper feos son números positivos cuyos factores primos están en la lista de números primos de tamaño k. Por ejemplo, [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] es la secuencia de los primeros 12 números súper feos dados primos = [2, 7, 13, 19] de talla 4.

Nota:
(1) 1 es un número muy feo para cualquier primo dado.
(2) Los números dados en números primos están en orden ascendente.
(3) 0

Solución Java

Siga agregando valores mínimos a los resultados y actualizando el valor de tiempo para el número primo elegido en cada ciclo.

public int nthSuperUglyNumber(int n, int[] primes) {
    int[] times = new int[primes.length];
    int[] result = new int[n];
    result[0] = 1; // first is 1
 
    for (int i = 1; i < n; i++) {
        int min = Integer.MAX_VALUE;
        for (int j = 0; j < primes.length; j++) {
            min = Math.min(min, primes[j] * result[times[j]]);
        }
 
        result[i] = min;
 
        for (int j = 0; j < times.length; j++) {
            if (result[times[j]] * primes[j] == min) {
                times[j]++;
            }
        }
    }
 
    return result[n - 1];
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *