class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
result = 0
dict = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
for i in range(len(s)-1):
if dict[s[i]] < dict[s[i + 1]]:
result -= dict[s[i]]
else:
result += dict[s[i]]
result += dict[s[-1]]
return result
这道题其实比较好理解,通常情况下,罗马数字中小的数字在大的数字的右边,一般来说有几个罗马数字就对应加相应的数字几次,但是也有特例,比如题目中提到的特殊的规则
一开始我想着枚举出所有可能出现的枚举组合,但是转念一想,组合似乎有点多,而且想复杂了,这种特殊的情况其实就是代表小的数在代表大的数字的后面,呈现出了一种逆序的关系,只要顺序就直接相加,逆序就减掉那个小的,再加上大的就ok了