自己写的
def romanToInt(s):
M = ["", "M", "MM", "MMM"]
C = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]
X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]
I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
replace_list = ['MD', 'MC', 'ML', 'MX', 'MV', 'MI',
'CL', 'CX', 'CV', 'CI',
'DL', 'DX', 'DV', 'DI',
'LV', 'LI', 'XV', 'XI']
for str in replace_list:
if str in s:
s = s.replace(str, str[0] + ',' + str[1])
n = s.split(',')
ans = 0
for nu in n:
if nu in M:
ans += M.index(nu)*1000
elif nu in C:
ans += C.index(nu)*100
elif nu in X:
ans += X.index(nu)*10
elif nu in I:
ans += I.index(nu)*1
return ans
print(romanToInt('DCCCLXXV'))
评论里面的 ,感觉很巧妙
l = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
result = 0
for i in range(len(s)):
result += l[s[i]]
if i > 0 and l[s[i-1]] < l[s[i]]:
result -= l[s[i-1]]*2
return result
所有字符值加起来,如果某个字符比右边的小,减去它的二倍。