題目概要

羅馬數字由7個不同的符號組成(如下表所示),題目會給定一串羅馬符號,要求算出該數串的數值。

Symbol Value Symbol Value
I 1 V 5
X 10 L 50
C 100 D 500
M 1000

解題思路

  • 先建一個map容器,記錄下每個羅馬數字對應的數值大小
  • 羅馬數字組成有個特別的規則是:如果左邊的值比右邊的小,那麼就要用大減小的方式算出那兩個串數的值;除此之外都是直接相加。
  • 因此利用這個規則可以推導出如果左數大於等於右數那麼就把sum加上左數,如果左數小於右數那麼就把sum減掉左數

參考程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int romanToInt(string s) {
unordered_map<char,int> mp {
{'I',1},{'V',5},
{'X',10},{'L',50},
{'C',100},{'D',500},
{'M',1000},
};
int sum=0;
for(int i=0;i<s.size();i++) {
if(mp[s[i]]>=mp[s[i+1]]) sum+=mp[s[i]];
else sum-=mp[s[i]];
}
return sum;
}
};