题目:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
题目意思很简单,即将一个罗马数字的字符串,转化为整数。
首先我们需要对罗马数字有一个基本的认识,由于题目已将数字大小限定在1~3999,所以我们只需考虑千位数即可,无需涉及数字的分段等复杂的问题。
下面简要列出罗马数字中的单位:'I' 1; 'V' 5; 'X' 10; 'L' 50 ; 'C' 100; 'D' 500; 'M' 1000
罗马数字的大小即是将其中所包含字符所代表的的数字求和,其中数字的组合规律为: I X C 会因位置的不同而加减其值。举个栗子,IV的值为4,而VI的值为6;CD的值为400,而DC的值为600。V L D M在1~3999的范围内则不存在该问题。
最终选择了一个只需遍历一次字符串的方法,即从末尾开始遍历罗马数字字符串,若出现 I(X ,C) ,如果已遍历部分的值高于V(L, D),则在已有结果中减去I(X ,C)的值,反之,则加上。
总结一句,此题的关键在于找规律,最后上代码咯~
class Solution:
# @return an integer
def romanToInt(self, s):
L=len(s)
res=0
for i in range(L-1,-1,-1):
a=s[i]
if a=='I':
if res>=5:
res-=1
else:
res+=1
elif a=='V':
res+=5
elif a=='X':
if res>=50:
res-=10
else:
res+=10
elif a=='L':
res+=50
elif a=='C':
if res>=500:
res-=100
else:
res+=100
elif a=='D':
res+=500
elif a=='M':
res+=1000
return res