Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:
(摘自互动百科)
表示数的基本方法:除I、X、C位于大数后作为加数,位于大数前作为减数外,一般把若干罗马基本数字写在一起,它表示的数字等于各个数字的和。
1.重写: III(3) XX(20) CC(200)
2.左减: IX(9) XL(40) CD(400)
3.右加: VII(7) XI(11) LX(60)
先设法将输入的整个字符串中的所有罗马基本数字转换成阿拉伯数字,然后从左向右遍历,把当前数字加上,如果发现当前数字比上一个大,则把前一个减去两遍。
解:
class Solution {
public:
int romanToInt(string s) {
std::vector<int> numbers;
int result = 0;
for(size_t index = 0; index < s.size(); index++)
{
switch(s[index])
{
case 'I':
numbers.push_back(1);
break;
case 'V' :
numbers.push_back(5);
break;
case 'X' :
numbers.push_back(10);
break;
case 'L' :
numbers.push_back(50);
break;
case 'C' :
numbers.push_back(100);
break;
case 'D' :
numbers.push_back(500);
break;
case 'M' :
numbers.push_back(1000);
break;
}
}
for(size_t index = 0; index < numbers.size(); index++)
{
result += numbers[index];
if(index != 0 && numbers[index] > numbers[index-1])
{
result -= 2*numbers[index-1];
}
}
return result;
}
};