Notas de limpieza de Leetcode Trece números romanos a la versión digital de Scala
Dirección de origen: números romanos a números
Descripción del problema:
números Omán están representados por símbolos siete diferentes:
I
,V
,X
,L
,C
,D
yM
.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Por ejemplo, dos se escriben como
II
en números romanos, solo dos se suman. Doce se escribe comoXII
, que es simplementeX
+II
. El número veintisiete se escribe comoXXVII
, que esXX
+V
+II
.
Los números romanos generalmente se escriben de mayor a menor de izquierda a derecha. Sin embargo, el número para cuatro no lo es
IIII
. En cambio, el número cuatro se escribe comoIV
. Como el uno está antes de los cinco, lo restamos y hacemos cuatro. El mismo principio se aplica al número nueve, que se escribe comoIX
. Hay seis instancias donde se usa la resta:
I
se puede colocar antes deV
(5) yX
(10) para hacer 4 y 9.X
se puede colocar antes deL
(50) yC
(100) para hacer 40 y 90.C
se puede colocar antes deD
(500) yM
(1000) para hacer 400 y 900.
Dado un número romano, conviértalo a un número entero. La entrada está garantizada para estar dentro del rango de 1 a 3999.
Ejemplo 1:
Input: "III"
Output: 3
Ejemplo 2
Input: "IV"
Output: 4
Ejemplo 3
Input: "IX"
Output: 9
Ejemplo 4
Input: "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.
Ejemplo 5:
Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
Breve análisis de ideas:
Similar a la conversión de números a letras romanas, la correspondencia entre letras romanas y valores numéricos se establece mediante mapeo o matrices, y analizando las características de composición de las letras romanas, si s (i-1) <s (i), como IX significa que el valor de la suma debe ser Resta s (i-1), de lo contrario suma. Para facilitar la consideración del problema del límite, agregamos O-> 0 y lo colocamos al final de la cadena s.
Suplemento de código:
object Solution {
def romanToInt(s: String): Int = {
val dict : Map[Char,Int] = Map(
'O' -> 0,
'I' -> 1,
'V' -> 5,
'X' -> 10,
'L' -> 50,
'C' -> 100,
'D' -> 500,
'M' -> 1000
)
var ans:Int = 0
var sStr = s + 'O'
for (i <- 0 to s.length-1){
//println("-------" + i + "--------")
//println("s(i): " + dict(s(i)))
//println("s(i+1): " + dict(s(i+1)))
if (dict(sStr(i)) < dict(sStr(i+1))){
ans = ans - dict(s(i))
}
else
{ans = ans + dict(sStr(i))}
//println("ans: " + ans)
}
return ans
}
}