13. roman to integer

Description

Difficulty: Easy

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

罗马数字转换为阿拉伯数字。

Solution

一道很有趣的题。根据罗马数字左加右减的规则,在字符串长度大于 0 的情况下,每次取字符串第一个元素,若第一个元素是 IXC 其中一个且小于第二个元素,则总和加第二个元素减第一个元素,字符串修改为从第三个元素开始;
若字符串长度为 1 或第一个元素不小于第二个元素,则总和加上第一个元素的值,字符串从第二个元素开始。
返回总和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class (object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
sum = 0
while len(s) > 0:
if len(s) == 1:
sum += dict[s[0]]
s = s[1:]
elif dict[s[0]] < dict[s[1]] and s[0] in 'IXC':
sum += (dict[s[1]] - dict[s[0]])
s = s[2:]
else:
sum += dict[s[0]]
s = s[1:]
return sum