Leetcode-13. De números romanos a enteros (solución Java)

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

Supongo que te gusta

Origin blog.csdn.net/weixin_51529267/article/details/113444982
Recomendado
Clasificación