罗马数字wiki上已经讲得比较清楚了,
对于本题,只要把握好下面两点即可:
1、如果一个数是最后一位或者比前面的数大于等于,加上这个数
2、否则,减去这个数
1 class Solution { 2 public: 3 int romanToInt(string s) { 4 int ans = 0; 5 unordered_map<char,int> m{ 6 {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000} 7 }; 8 for(int i = 0; i < s.size(); i++) { 9 int tmp = m[s[i]]; 10 if(i == s.size()-1 || m[s[i+1]] <= tmp) ans += tmp; 11 else ans -= tmp; 12 } 13 return ans; 14 } 15 };