Roman to Integer
题目描述
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
解题方法
这两道题目考的频率还挺高的,主要是要记得罗马数字的概念, 字符对应的数字。 将罗马数字转换为整数其实就是按顺序读出来
- 如果前面的数比后面的数大,那么就是additional notation的,就加到结果了
- 如果前面的数比后面的数小,那么是substractive notation的,而substractive notation的只能是两位,所以只要判断前后两位就可以
从后往前读
从倒数第二位往前读,如果当前的字符s[i]代表的数字比s[i+1]代表的数字小,说明它们两个是substractive的,应当减去当前的value
从前往后读
用一个variable pre保存前一个字符,没遇到一个新的都先加到result上,如果发现是substractive的,就应该减去它的两倍(因为之前加过一次)
Solution
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
dic = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
length = len(s)
result = 0
result += dic[s[-1]]
for i in range(length - 2, -1, -1):
if dic[s[i]] >= dic[s[i+1]]:
result += dic[s[i]]
else:
result -= dic[s[i]]
return result