问题介绍
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
方法
思路:
1. 对每个字符进行数字的映射,这里存储在数组中;
2. 遍历字符串,针对IV,VI等这类数字,使用两个指针表示,若发现前者小于后者,结果sum则减去;反之sum加上。
int romanToInt(string s) {
if (s.empty()) return 0;
int roman[24] = {};
roman['I' - 'A'] = 1;
roman['V' - 'A'] = 5;
roman['X' - 'A'] = 10;
roman['L' - 'A'] = 50;
roman['C' - 'A'] = 100;
roman['D' - 'A'] = 500;
roman['M' - 'A'] = 1000;
int sum = 0;
int right = roman[s.front() - 'A'];
for (int i = 1; i < s.size(); ++i) {
int curr = right;
right = roman[s[i] - 'A'];
if (right > curr)
sum -= curr;
else
sum += curr;
}
return sum + right;
}