Leetcodeスクラブノート13ローマ数字からデジタルScalaバージョンへ

Leetcodeスクラブノート13ローマ数字からデジタルScalaバージョンへ

送信元アドレス:ローマ数字から数字へ

問題の説明:

:オマーンの数字は、7つの異なる記号で表されIVXLCDM

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

たとえば、2つはIIローマ数字のよう書かれ、2つだけが加算されます。12はXIIとして記述されます。これは単にX+ IIです。27は以下のように書かれている番号XXVIIで、XX+ V+ II

ローマ数字は通常、左から右へ最大から最小へと書かれています。ただし、4の数字はではありませんIIII代わりに、番号4はと表記されIVます。1つは5つの前にあるので、4を減算します。同じ原則が9にも当てはまりますIX減算が使用されるインスタンスは6つあります。

  • IV(5)とX(10)の前に配置して、4と9を作成できます。
  • XL(50)とC(100)の前に配置して、40と90にすることができます
  • CD(500)とM(1000)の前に配置して、400と900にすることができます

ローマ数字を指定して、整数に変換します。入力は1〜3999の範囲内にあることが保証されています。

例1:

Input: "III"
Output: 3

例2:

Input: "IV"
Output: 4

例3:

Input: "IX"
Output: 9

例4:

Input: "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

例5:

Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

アイデアの簡単な分析:

数字からローマ字への変換と同様に、ローマ字と数値の間の対応は、マッピングまたは配列によって、およびローマ字の構成特性を分析することによって確立されます。s(i-1)<s(i)(IXなど)の場合、合計値はs(i-1)を減算します。それ以外の場合は加算します。境界問題の検討を容易にするために、O-> 0を追加し、それをs文字列の最後に配置しました。

コード補足:

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
    }
}

おすすめ

転載: www.cnblogs.com/ganshuoos/p/12706407.html