Leetcode: 13 números romanos a entero

13 números romanos a enteros

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

El valor del 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 número 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.

Ideas para resolver problemas

这道题两年前做过,已经觉得很陌生
问题不要复杂化,常规想,常规做

给一串罗马数字,是由一个个字符构成
1)考虑在没有特殊情况下的时候,每个字符对应着一个数字
2)将出现的特殊情况特殊处理,需要注意的是,如果遇到两个字符开头的,
第一个是以特殊字符开头与另外一个不构成6个特殊情况之一,需要额外处理。

Código

class Solution {
    
    
    public int romanToInt(String s) {
    
    
        char[] chars = s.toCharArray();
		
		存储key-value
        Map<Character, Integer> maps = new HashMap();
        maps.put('I', 1);
        maps.put('V', 5);
        maps.put('X', 10);
        maps.put('L', 50);
        maps.put('C', 100);
        maps.put('D', 500);
        maps.put('M', 1000);
        int sum = 0;
		
		//遍历
        for (int i = 0; i < chars.length; i++) {
    
    
         	//特殊情况处理  
            if (chars[i] == 'I' || chars[i] == 'X' || chars[i] == 'C') {
    
    
                if (i+1 < chars.length && chars[i + 1] == 'V'  && chars[i] == 'I') {
    
    
                    sum += 4;
                    i++;
                    continue;
                } else if (i+1 < chars.length  && chars[i + 1] == 'X'  && chars[i] == 'I') {
    
    
                    sum += 9;
                    i++;
                    continue;
                } else if (i+1 < chars.length && chars[i + 1] == 'L' && chars[i] == 'X') {
    
    
                    sum += 40;
                    i++;
                } else if (i+1 < chars.length && chars[i + 1] == 'C' && chars[i] == 'X') {
    
    
                    sum += 90;
                    i++;
                } else if (i+1 < chars.length  && chars[i + 1] == 'D' && chars[i] == 'C') {
    
    
                    sum += 400;
                    i++;
                    continue;
                } else if (i+1 < chars.length  && chars[i + 1] == 'M' && chars[i] == 'C') {
    
    
                    sum += 900;
                    i++;
                    continue;
                } else {
    
    
                    sum += maps.get(chars[i]);
                    continue;
                }
            } else {
    
    
                sum += maps.get(chars[i]);
            }
        }
        return sum;
        }
    }

pruebaInserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/JAYU_37/article/details/107226473
Recomendado
Clasificación