Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
Python:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dic={'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}
res,pre=0,0
for index,n in enumerate(s[::-1]):
if dic[n]>=pre:
res+=dic[n]
else:
res-=dic[n]
pre=dic[n]
return res
和上一题一样,比较简单,这里还有别人的一种思路。
Python 2:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dic = {
'I': lambda i: -1 if s[i + 1] in ['V', 'X'] else 1,
'X': lambda i: -10 if s[i + 1] in ['L', 'C'] else 10,
'C': lambda i: -100 if s[i + 1] in ['D', 'M'] else 100,
'V': lambda i: 5,
'L': lambda i: 50,
'D': lambda i: 500,
'M': lambda i: 1000,
}
x = 0
s += '@'
for i, ch in enumerate(s[:-1]):
x += dic[ch](i)
return x
附上罗马数字的换算方法:
(1)基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个;
(2)不能把基本数字 V 、L 、D中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个;
(3)V 和 X 左边的小数字只能用 Ⅰ;
(4)L 和 C 左边的小数字只能用 X;
(5)D 和 M 左边的小数字只能用 C。