LeetCode 13. Roman to Integer 题解(C++)
题目描述
- Given a roman numeral, convert it to an integer.
- Input is guaranteed to be within the range from 1 to 3999.
思路
- 首先对罗马数字作出两个归纳:
1.在保证整数是1~3999的范围内时,范围内的每个数字都可以用如下几个罗马数字的基础字符表示,分别为I,V,X,L,C,D,M,每个字符分别对应的数值为1,5,10,50,100,500,1000;
2.若罗马数字的字符对应的数值大于等于其右边字符对应的数值,则应该加上它自身对应的数值,相反则减去它自身对应的数值。 - 由上面的归纳,我们需要创建一张罗马数字的基础字符与其相对应的数值的哈希表,这里使用ordered_map实现,之后遍历字符串s,并用上面归纳的第2点为原则进行比较,并加上或减去相应的数值即可。
代码
class Solution
{
public:
int romanToInt(string s)
{
unordered_map<char, int> romanToInt;
romanToInt['I'] = 1;
romanToInt['V'] = 5;
romanToInt['X'] = 10;
romanToInt['L'] = 50;
romanToInt['C'] = 100;
romanToInt['D'] = 500;
romanToInt['M'] = 1000;
int result = romanToInt[s[s.size() - 1]];
for (int i = s.size() - 2; i >= 0; --i)
{
if (romanToInt[s[i]] >= romanToInt[s[i + 1]])
{
result += romanToInt[s[i]];
}
else
{
result -= romanToInt[s[i]];
}
}
return result;
}
};