【LeetCode】013. Roman to Integer
阿新 • • 發佈:2018-03-25
BE ant dot range 不能 code action lin get
1、相同的數字連寫,所表示的數等於這些數字相加得到的數,如:Ⅲ = 3;
2、小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如:Ⅷ = 8;Ⅻ = 12;
3、小的數字,(限於Ⅰ、X 和C)在大的數字的左邊,所表示的數等於大數減小數得到的數,如:Ⅳ= 4;Ⅸ= 9;
4、正常使用時,連寫的數字重復不得超過三次。(表盤上的四點鐘“IIII”例外)
5、在一個數的上面畫一條橫線,表示這個數擴大1000倍。
有幾條須註意掌握:
1、基本數字Ⅰ、X 、C 中的任何一個,自身連用構成數目,或者放在大數的右邊連用構成數目,都不能超過三個;放在大數的左邊只能用一個。
2、不能把基本數字V 、L 、D 中的任何一個作為小數放在大數的左邊采用相減的方法構成數目;放在大數的右邊采用相加的方式構成數目,只能使用一個。
3、V 和X 左邊的小數字只能用Ⅰ。
4、L 和C 左邊的小數字只能用X。
5、D 和M 左邊的小數字只能用C。
轉自:Grandyang
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
題解:
只要知道羅馬數字的規律即可
基本字符 | I | V | X | L | C | D | M |
相應的阿拉伯數字表示為 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 int n = s.size();5 int res = 0; 6 unordered_map<char, int> map = { { ‘I‘ , 1 }, 7 { ‘V‘ , 5 }, 8 { ‘X‘ , 10 }, 9 { ‘L‘ , 50 }, 10 { ‘C‘ , 100 }, 11 { ‘D‘ , 500 }, 12 { ‘M‘ , 1000 } }; 13 for (int i = 0; i < n; ++i) { 14 int num = map[s[i]]; 15 if (i == n - 1 || map[s[i + 1]] <= map[s[i]]) 16 res += num; 17 else 18 res -= num; 19 } 20 21 return res; 22 } 23 };
【LeetCode】013. Roman to Integer