Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
1、此题并不需要考虑罗马数字输入的合法性。
2、此题当前的符号并不能马上确定它的值,与后边输入的符号也有关系。之前只是考虑输入当前符号时,比较后面的符号。这样考虑时,需要判断后两位符号,较为复杂。但考虑前一个符号就很简单了。这道题给我的教训是,当思路不通时,可以考虑相反的方向。
class Solution {
public:
int charToInt(char c)
{
int num;
switch(c)
{
case 'I': num = 1; break;
case 'V': num = 5; break;
case 'X': num = 10;break;
case 'L': num = 50;break;
case 'C': num = 100;break;
case 'D': num = 500;break;
case 'M': num = 1000;break;
}
return num;
}
int romanToInt(string s) {
int sum,i,pre,cur;
sum = charToInt(s[0]);
for(i=1;i<s.length();i++)
{
pre = charToInt(s[i-1]);
cur = charToInt(s[i]);
if(cur<=pre)
{
sum +=cur;
}
else
{
sum = sum - pre * 2 +cur;
}
}
return sum;
}
};