Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
和整数转罗马数字一样,根据转换规则转换。
class Solution {
public:
//分析最近的两个字符,如果i字符比i-1字符小,那么此时应该是sum += value[i]
//否则,就应该向4类似的处理,但是由于value[i - 1],在i-1的时候已经加了一次,
//所以sum = sum - value[i - 1] + value[i] - value[i - 1];
int romanToInt(string s) {
int len = s.length();
unordered_map<char, int> mask;
mask['I'] = 1;
mask['V'] = 5;
mask['X'] = 10;
mask['L'] = 50;
mask['C'] = 100;
mask['D'] = 500;
mask['M'] = 1000;
int sum = mask[s[0]];
for(int i = 1; i < len; i++)
{
if(mask[s[i - 1]] >= mask[s[i]])
{
sum += mask[s[i]];
}
else
{
sum += mask[s[i]] - 2 * mask[s[i - 1]];
}
}
return sum;
}
};