tema:
Los números romanos contienen los siguientes siete caracteres: I, V, X, L, C, D y M.
personaje | Valor numérico |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
METRO | 1000 |
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 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:
输入: "III"
输出: 3
Ejemplo 2:
输入: "IV"
输出: 4
Ejemplo 3:
输入: "IX"
输出: 9
Ejemplo 4:
输入: "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
Ejemplo 5:
输入: "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.
Codificar directamente
class Solution {
public static int romanToInt(String s) {
Map<Character, Integer> map=new HashMap<Character, Integer>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
int result=0;
//从左向右遍历字符串
//注意:遍历至长度-1,即:字符串的倒数第二位,最后一位不遍历,防止字符串下标越界
for(int i=0, len=s.length();i<len-1;i++) {
//获取第i位字符在集合中所对应的值
int num1=map.get(s.charAt(i));
//获取第i+1位字符在集合中所对应的值
int num2=map.get(s.charAt(i+1));
//如果前一位小于后一位,则减去前一位,终止该层循环,下层循环继续
if(num1<num2){
result-=num1;
//终止该层循环,下层循环继续
continue;
}
//否则,将该值加至原返回值上
result+=num1;
}
//将字符串最后一位在集合中对应的值加至原返回值上
result+= map.get(s.charAt(s.length()-1));
return result;
}
}
Por último, adjunte el título para conectar
Leetcode-13. Números romanos con enteros