【力扣】罗马数字转整数,哈希集合+模拟
罗马数字转整数原题地址
方法一:模拟
罗马数字是字符串,其中每个字符都对应一个整数值,为了方便查找,可以预先把这种对应关系存储到哈希表中。
遍历字符串,对于每个字符,
- 如果该字符不是最右边的字符,且它右边的字符对应的整数值更大一些,就要减去该字符对应的整数值。
- 否则就加上该字符对应的整数值。
// 方法一:模拟
class Solution {
unordered_map<char, int> symbolValues = {
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000}
};
public:
int romanToInt(string s) {
int ans = 0;
int n = s.size();
for (int i = 0; i < n; ++i)
{
int val = symbolValues[s[i]];
// 若右边的数更大,就-val,否则+val
if (i + 1 < n && val < symbolValues[s[i + 1]])
{
ans -= val;
}
else
{
ans += val;
}
}
return ans;
}
};