LeetCode: # 13 de número romano a entero (Java) [mapa no utilizado]

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

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

Por ejemplo, el número romano 2 se escribe II, que significa dos paralelos. 12 se escribe XII, 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 los siguientes seis casos: 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.

respuesta:

罗马数字由 I,V,X,L,C,D,M 构成;
当一个小值在大值的左边,则减小值,如 IV=5-1=4;
当一个小值在大值的右边,则加小值,如 VI=5+1=6;
由上可知,右值永远为正,因此最后一位必然为正。

Como todavía no he entrado en contacto con el estudio de las estructuras de datos de Java, no se utiliza map, pero se define un método para reflejar el número entero representado por cada carácter.

public int getValue(char ch) {
    
    
        switch(ch) {
    
    
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            default: return 0;
        }
    }

El bucle for compara cada carácter con el número entero representado por el carácter a la derecha para sumar o restar.

class Solution {
    
    
    public int romanToInt(String s) {
    
    
        int sum = 0;
        int preNum = getValue(s.charAt(0));
        for(int i = 1;i < s.length(); i ++) {
    
    
            int num = getValue(s.charAt(i));
            if(preNum < num) {
    
    
                sum -= preNum;
            } else {
    
    
                sum += preNum;
            }
            preNum = num;
        }
        sum += preNum;
        return sum;
    }
    
    public int getValue(char ch) {
    
    
        switch(ch) {
    
    
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            default: return 0;
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_45621376/article/details/111866005
Recomendado
Clasificación