【Python】ローマ数字を整数値に変換する【LeetCode】
IIIやIVなどのローマ数字を整数値に変換する方法をまとめておく。
IIIは3、IVは4といった用に文字列が入力されたときに数値を返すような関数を作る。
Just a moment...
ローマ数字と値の対応
ローマ数字と値の対応関係はこのようになっている。
基本的に値の大きい文字が左側にくる。
例えば、
Input: s = "MC"
Output: 1100
ただし、値の小さい文字が左側にくることもある。
例えば、
Input: s = "IV"
Output: 4
この場合にも対応する必要がある。
対応関係を表す辞書を作成
ローマ数字と値の組を表す辞書を作成する。
dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
文字列を右端から読んでいく
文字列を右端から読んでいって、左の文字の方が小さかったら、その文字に対応する値は足すのではなく引く。
sum = 0
y = 0 # 比較用の変数
for i in s[::-1]: # sは入力された文字列のこと
if y <= dict[i] or y == 0:
sum += dict[i]
y = dict[i]
else:
sum -= dict[i]
return sum
こんなに簡単に書けてしまう。
右端から読んで足すのか引くのかを選択するという考えが出てくれば書けてしまうコード。
ちなみに自分のコードは…
自分は↑のように右から読んでいくという考えが出なかったので左から地道に読んだ。
自分が書いたコードは↓
def romanToInt(self, s):
dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
sum = 0
idx = 0
if len(s) == 1:
return dict[s]
else:
for i in range(len(s)):
if idx+1 < len(s):
if dict[s[idx]] >= dict[s[idx+1]]:
sum += dict[s[idx]]
idx += 1
elif s[idx] == 'I' and s[idx+1] == 'V':
sum += 4
idx += 2
elif s[idx] == 'I' and s[idx+1] == 'X':
sum += 9
idx += 2
elif s[idx] == 'X' and s[idx+1] == 'L':
sum += 40
idx += 2
elif s[idx] == 'X' and s[idx+1] == 'C':
sum += 90
idx += 2
elif s[idx] == 'C' and s[idx+1] == 'D':
sum += 400
idx += 2
elif s[idx] == 'C' and s[idx+1] == 'M':
sum += 900
idx += 2
elif idx+1 == len(s):
sum += dict[s[idx]]
return sum
else:
return sum
処理は遅いけど求めることはできる。
左の文字から順に見ていって値を足していくというごく単純なものです。
でもコードがかなり長くなってしまう笑。
人気記事
人気記事はこちら。
新着記事
新着記事はこちら。