1.题目
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
和上一题相反,将罗马数字转换成整数。
2.思路
罗马数字1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}.
我们从后往前扫描,如果前面的字符的值小于后面的字符的值,那么累计值应该减去前一个字符的值,否则累计值加上这个字符的值。
举例: IX 前一个字符是I (代表值是1), 后一个字符是 X(代表值是10) ,所以累计值为10-1=9.
class Solution {
public:
int toNumber(char ch){
switch (ch) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
}
return 0;
}
int romanToInt(string s) {
int len=s.length();
int ans=toNumber(s[len-1]);
for(int i=len-2;i>=0;i--)
{
if( toNumber(s[i]) < toNumber(s[i+1]) )
ans -=toNumber(s[i]);
else
ans += toNumber(s[i]);
}
return ans;
}
};