Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
class Solution {
public:
int romanToInt(string s)
{
int ret = 0;
for (int i = 0; i < s.size(); i++)
{
char c = s[i];
switch(c)
{
case 'I':
if (i < s.size() -1)
{
if(s[i+1] == 'V')
{
ret += 4;
i++;
}
else if(s[i+1] == 'X')
{
ret += 9;
i++;
}
else
ret += 1;
}
else
ret += 1;
break;
case 'V':
ret += 5;
break;
case 'X':
if (i < s.size() -1)
{
if(s[i+1] == 'L')
{
ret += 40;
i++;
}
else if(s[i+1] == 'C')
{
ret += 90;
i++;
}
else
ret += 10;
}
else
ret += 10;
break;
case 'L':
ret += 50;
break;
case 'C':
if (i < s.size() -1)
{
if(s[i+1] == 'D')
{
ret += 400;
i++;
}
else if(s[i+1] == 'M')
{
ret += 900;
i++;
}
else
ret += 100;
}
else
ret += 100;
break;
case 'D':
ret += 500;
break;
case 'M':
ret += 1000;
break;
default:
break;
}
}
return ret;
}
};
关键在于找出三类(六种)特殊的排列。