Sword hace referencia a la oferta 49. Código y análisis de números feos [Java]
1. Título
Los números que solo contienen los factores primos 2, 3 y 5 se denominan números feos. Por ejemplo, 6 y 8 son números desagradables, pero 14 no lo es porque contiene el factor primo 7. Tradicionalmente, consideramos al 1 como el primer número desagradable. Encuentra el enésimo número feo en orden ascendente.
Dos, análisis y código
1. Marque la posición + resuelva por turno
(1) Pensando
Dado que los números desagradables solo contienen los factores primos 2, 3 y 5, los números desagradables se pueden obtener multiplicando estos tres factores en orden ascendente.
En el proceso de cálculo, el siguiente número feo proviene de un número feo generado multiplicado por 2, 3 o 5, y la matriz de números feos generada se ordena. Puede diseñar 3 marcas para registrar el tiempo más reciente y cada factor respectivamente Multiplica la posición de los datos utilizados para generar el número feo requerido, evitando así operaciones repetidas.
(2) Código
import java.util.*;
public class Solution {
public int GetUglyNumber_Solution(int index) {
if (index <= 0)
return 0;
ArrayList<Integer> uglyNums = new ArrayList<>();
uglyNums.add(1);
int i2 = 0, i3 = 0, i5 = 0;
int num2 = uglyNums.get(i2++) * 2;
int num3 = uglyNums.get(i3++) * 3;
int num5 = uglyNums.get(i5++) * 5;
for (int i = 1; i < index; i++) {
int num = Math.min(num2, Math.min(num3, num5));
uglyNums.add(num);
if (num == num2)
num2 = uglyNums.get(i2++) * 2;
if (num == num3)
num3 = uglyNums.get(i3++) * 3;
if (num == num5)
num5 = uglyNums.get(i5++) * 5;
}
return uglyNums.get(index - 1);
}
}
(3) Resultados
Duración: 21ms, memoria ocupada: 9532k.
Tres, otro
Nada.