Notas de limpieza de Leetcode Trece números romanos a la versión digital de Scala

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, Dy M.

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

Por ejemplo, dos se escriben como IIen números romanos, solo dos se suman. Doce se escribe como XII, que es simplemente X+ II. El número veintisiete se escribe como XXVII, que es XX+ 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 como IV. 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 como IX. Hay seis instancias donde se usa la resta:

  • Ise puede colocar antes de V(5) y X(10) para hacer 4 y 9.
  • Xse puede colocar antes de L(50) y C(100) para hacer 40 y 90.
  • Cse puede colocar antes de D(500) y M(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
    }
}

Supongo que te gusta

Origin www.cnblogs.com/ganshuoos/p/12706407.html
Recomendado
Clasificación