Leetcodeスクラブノート13ローマ数字からデジタルScalaバージョンへ
送信元アドレス:ローマ数字から数字へ
問題の説明:
:オマーンの数字は、7つの異なる記号で表され
I
、V
、X
、L
、C
、D
とM
。
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つあります。
I
V
(5)とX
(10)の前に配置して、4と9を作成できます。X
L
(50)とC
(100)の前に配置して、40と90にすることができます。C
D
(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
}
}