Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
给定一个罗马数字,把它转换为一个整数。
输入被保证在 1 到 3999 之间。
罗马数字的规则详细见帖子下方。
可以很简单去思考这个规则,就是对于输入的罗马数字字符串,从后向前扫描,遇到前面数大于等于后面的最大数的时候,相加;遇到前面数小于后面的最大数的时候,相减。
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
result = 0
maxDigit = 1
for i in range(len(s)-1, -1, -1):
if dic[ s[i] ] >= maxDigit:
#存放已经扫描过的最大数值
maxDigit = dic[ s[i] ]
result = result + dic[ s[i] ]
else:
result = result - dic[ s[i] ]
return result
罗马数字拼写规则
罗马数字共有 7 个,即Ⅰ(1)、Ⅴ(5)、Ⅹ(10)、Ⅼ(50)、Ⅽ(100)、Ⅾ(500)和Ⅿ(1000)。按照下述的规则可以表示任意正整数。需要注意的是罗马数字中没有 “0”,与进位制无关。一般认为罗马数字只用来记数,而不作演算。
range()
>>> range(1, 5) #从1 到 5 ,但是不包含5
[1, 2, 3, 4]
>>> range(1, 5, 2) #从1 到 5,间隔是2,不包含5
[1, 3]
>>> range(5) #从 0 到 5,不包含5
[0, 1, 2, 3, 4]