罗马数字转为普通数字表示,其中需要注意的是特殊数字的表示方法,比如和4,9相关的表示方法,因为都是非单个字符表示,如果遍历转换会出现麻烦
speciallist——特殊的罗马数字列表
valuedic——罗马数字与普通数字对应关系的字典
步骤:1.排查是是否有speciallist中的内容,有就记录下位置,通过valuedic得出对应的数字
2.将speciallist之外的罗马数字按照valuedic进行转换
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
speciallist=['IV','IX','XL','XC','CD','CM']
valuedic={'I':1,'IV':4,'V':5,'IX':9,'X':10,'XL':40,'L':50,'XC':90,'C':100,'CD':400,'D':500,'CM':900,'M':1000}
rval=0
indexlist=[]
for i in range(len(speciallist)):
if s.find(speciallist[i])>=0:
indexlist.append(s.index(speciallist[i]))
rval+=valuedic[speciallist[i]]
indexlist.append(s.index(speciallist[i])+1)
for i in range(len(s)):
if i in indexlist:
continue
rval+=valuedic[s[i]]
return rval
Discussion中看到别人的一个solution,比我的要简洁很多,特殊可以全部找出来后进行特殊处理,也可以将特殊找出来普通化后一起处理
class Solution:
def romanToInt(self, s: str) -> int:
translations = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
number = 0
s = s.replace("IV", "IIII").replace("IX", "VIIII")
s = s.replace("XL", "XXXX").replace("XC", "LXXXX")
s = s.replace("CD", "CCCC").replace("CM", "DCCCC")
for char in s:
number += translations[char]
return number