Q:Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X+ II. The number twenty seven is written as XXVII, which is XX + V + II.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
I can be placed before V (5) and X(10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
Example 1:
Input: “III”
Output: 3
Example 2:
Input: “IV”
Output: 4
Example 3:
Input: “IX”
Output: 9
Example 4:
Input: “LVIII”
Output: 58
Explanation: L = 50, V= 5, III = 3.
Example 5:
Input: “MCMXCIV”
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
中文翻译:
罗马数字转化为阿拉伯数字
规则:如果小的数放在大的数前面,可以看为是一组,并且两者相减,比如IV=5-1=4 ;如果是其它情况直接相加即可。
思路:摸清了罗马数字表示的规则以后,其它这道题很简单。只要从前往后遍历,如果是一般情况,直接相加,如果是一组的情况,作相减处理即可。
python代码:
class Solution:
def romanToInt(self, s):
numerals = { "M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1 }# 定义一个罗马数字和阿拉伯数字的对应词典
sum=0#初始化为0
for x in range(len(s)):
if x>0 and numerals[s[x]]>numerals[s[x-1]]:
sum+=numerals[s[x]]-2*numerals[s[x-1]]# 当发现当前的数比前面的大时,需要减去两倍的前面的数字,因为这个数字在前面已经加过一次了
else:
sum+=numerals[s[x]]
return sum