LeetCode13, los números romanos se convierten a enteros

Descripción del Título

  1. De números romanos a enteros
    Los números romanos contienen los siguientes siete caracteres: I, V, X, L, C, D y M.

El valor de carácter
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Por ejemplo, el número romano 2 se escribe como II, lo que significa dos paralelos 1. 12 se escribe como XII, lo que significa X + II. 27 se escribe XXVII, que es XX + V + II.

Normalmente, los números pequeños en números romanos están a la derecha de los números grandes. Pero hay casos especiales, por ejemplo, 4 no se escribe como IIII, sino como IV. El número 1 está a la izquierda del número 5, y el número representado es igual al número 4 obtenido al restar el número 1 del número grande 5. Del mismo modo, el número 9 se representa como IX. Esta regla especial solo se aplica a las siguientes seis situaciones:

Puedo colocarme a la izquierda de V (5) y X (10) para representar 4 y 9.
X se puede colocar a la izquierda de L (50) y C (100) para representar 40 y 90.
C se puede colocar a la izquierda de D (500) y M (1000) para representar 400 y 900.
Dado un número romano, conviértalo en un entero. Asegúrese de que la entrada esté en el rango de 1 a 3999.

Ejemplo 1:

Entrada: "III"
Salida: 3
Ejemplo 2:

Entrada: "IV"
Salida: 4
Ejemplo 3:

Entrada: "IX"
Salida: 9
Ejemplo 4:

Entrada: "LVIII"
Salida: 58
Explicación: L = 50, V = 5, III = 3.
Ejemplo 5:

Entrada: "MCMXCIV"
Salida: 1994
Explicación: M = 1000, CM = 900, XC = 90, IV = 4.

rápido:

Todos los casos de prueba dados en la pregunta cumplen con las reglas de escritura de números romanos y no habrá bits cruzados.
Ejemplos como IC e IM no cumplen con los requisitos del título. 49 debe escribirse como XLIX y 999 debe escribirse como CMXCIX.
Para conocer las reglas detalladas de escritura de números romanos, consulte Números romanos-Matemáticas.
Aprobado 250,382 Enviado 403,078

Pensamiento directo

Como hicimos la última vez, es decir, para convertir enteros a números romanos, usamos la mente codiciosa para encontrar la coincidencia más grande cada vez. Porque su tipo de personaje es limitado.

class Solution {
    
    
    public int romanToInt(String s) {
    
    
        if(s==null||s.length()==0){
    
    
            return 0;
        }
        String [] str = new String[]{
    
    "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int[]nums = new int[]{
    
    1000,900,500,400,100,90,50,40,10,9,5,4,1};
        int start= 0,res=0;
        for(int i=0;i<str.length;i++){
    
    
            int dlt = str[i].length();
            while((start+dlt<=s.length())&&s.substring(start,start+dlt).equals(str[i])){
    
    //需要重复匹配。如MMM的情况
                res+=nums[i];
                start+=dlt;
            }
        }
        return res;

    }
}

Inserte la descripción de la imagen aquí
Análisis de
complejidad: Complejidad temporal: O (1), por tratarse de una operación limitada.
Complejidad espacial: O (1), todos usamos el espacio que se ha abierto.

Supongo que te gusta

Origin blog.csdn.net/qq_44861675/article/details/108437912
Recomendado
Clasificación