原题:
13. Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字个位到千位表示方法:
'I','V','X','L','C','D','M' 分别为:1,5,10,50,100,500,1000
对于一个罗马数的字符串,我们只需要用字符串的charAt(int index)方法,对它的每一个数进行判断,总和相加,要注意的是,每逢IV,IX。XL,XC,CD,CM这些数不能直接读取,要判断他们的前一位是否为对应得字符,处理后相加像,这里给出判断方法:
if (i>0&&s.charAt(i-1)=='I') {
result=result+3;}
else {
result=result+5;
}
比较的是IV这个罗马数。
整个代码如下:
public int romanToInt(String s) {
int result=0;
for (int i = 0; i < s.length(); i++) {
char tail=s.charAt(i);
switch (tail) {
case 'I':result=result+1;
break;
case 'V':if (i>0&&s.charAt(i-1)=='I') {
result=result+3;
}
else {
result=result+5;
}
break;
case 'X':
if (i>0&&s.charAt(i-1)=='I') {
result=result+8;
}
else {
result=result+10;
}
break;
case 'L':
if (i>0&&s.charAt(i-1)=='X') {
result=result+30;
}
else {
result=result+50;
}
break;
case 'C':
if (i>0&&s.charAt(i-1)=='X') {
result=result+80;
}
else {
result=result+100;
}
break;
case 'D':
if (i>0&&s.charAt(i-1)=='C') {
result=result+300;
}
else {
result=result+500;
}
break;
case 'M':
if (i>0&&s.charAt(i-1)=='C') {
result=result+800;
}
else {
result=result+1000;
}
break;
default:
break;
}
}
return result;
}
最后运行结果:
LeetCode提交结果展示: