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: L = 50, V= 5, III = 3.
Example 5:
Input: "MCMXCIV" Output: 1994 Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | class Solution { map<string, int> mp; public: int romanToInt(string s) { mp["I"] = 1; mp["V"] = 5; mp["X"] = 10; mp["L"] = 50; mp["C"] = 100; mp["D"] = 500; mp["M"] = 1000; mp["IV"] = 4; mp["IX"] = 9; mp["XL"] = 40; mp["XC"] = 90; mp["CD"] = 400; mp["CM"] = 900; int ret = 0; for(int i=0; i<s.size(); ++i) { if(i<s.size()-1 && mp.count(s.substr(i,2))!=0){ ret += mp[s.substr(i,2)]; i++; }else{ ret += mp[s.substr(i,1)]; } } return ret; } }; class Solution { public: int romanToInt(string s) { int res = 0; unordered_map<char, int> roman; roman['I'] = 1; roman['V'] = 5; roman['X'] = 10; roman['L'] = 50; roman['C'] = 100; roman['D'] = 500; roman['M'] = 1000; int last; for(int i=0; i<(int)s.size(); ++i){ int v = roman[s[i]]; if(i>0 && last<v) res -= 2*last; res += v; last = v; } return res; } }; |
No comments:
Post a Comment