简单的一个题。用一个map存储对应关系,从倒序遍历字符串,每次都从对应关系中找出数值加入result。
- 当出现4,9时,如LIXII,当遍历到'X'时,按照正常规律,我们将其加入结果。而当到下一个元素'I'时,我们需要减去两个'I'。
class Solution {
public:
int romanToInt(string s) {
map<char, int> m{ make_pair('I', 1), make_pair('V', 5), make_pair('X', 10),
make_pair('L', 50), make_pair('C', 100), make_pair('D', 500), make_pair('M', 1000) };
int result = m[s.back()];
if (s.size() == 1) return m[s[0]];
for (int i = s.size() - 2; i >= 0; i--){
result += m[s[i]];
if (m[s[i]]<m[s[i + 1]]) result -= 2 * m[s[i]];
}
return result;
}
};