Description
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 beforeV
(5) andX
(10) to make 4 and 9.X
can be placed beforeL
(50) andC
(100) to make 40 and 90.C
can be placed beforeD
(500) andM
(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: C = 100, L = 50, XXX = 30 and III = 3.
Example 5:
Input: "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
class Solution: def romanToInt(self, s): """ :type s: str :rtype: int """ ori_s = s char_mapping = { "I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000 } chars_mapping = { "IV": 4, "IX": 9, "XL": 40, "XC": 90, "CD": 400, "CM": 900 } sums = {} total = 0 for chars_key in chars_mapping.keys(): if chars_key in s and len(s)>0: total += chars_mapping[chars_key] * s.count(chars_key) s= s.replace(chars_key,'') for char_key in char_mapping.keys(): if char_key in s and len(s)>0: total += char_mapping[char_key] * s.count(char_key) s= s.replace(chars_key,'') return total
Answer 2 - 比较当前字符有之后字符之后决定加减
class Solution: def romanToInt(self, s): """ :type s: str :rtype: int """ roman={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} z=0 for i in range(len(s)-1): if roman[s[i]]>=roman[s[i+1]]: z+=roman[s[i]] else: z-=roman[s[i]] return z+roman[s[-1]]