罗马数字转换为整数
class Solution {
public int romanToInt(String s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
switch (s.charAt(i)) {
case 'I':
result = result + 1;
break;
case 'V':
result = result + 5;
break;
case 'X':
result = result + 10;
break;
case 'L':
result = result + 50;
break;
case 'C':
result = result + 100;
break;
case 'D':
result = result + 500;
break;
case 'M':
result = result + 1000;
break;
}
if(i != 0){
if((s.charAt(i)=='V'||s.charAt(i)=='X')&&s.charAt(i-1)=='I'){
result = result -1*2;
}else if((s.charAt(i)=='L'||s.charAt(i)=='C')&&s.charAt(i-1)=='X'){
result = result -10*2;
}else if((s.charAt(i)=='D'||s.charAt(i)=='M')&&s.charAt(i-1)=='C'){
result = result -100*2;
}
}
}
return result;
}
public static void main(String[] args) {
Solution s = new Solution();
int x = s.romanToInt("IV");
System.out.println(x);
}
}
6种特殊情况需要特殊处理,其余情况相同。
对于特殊情况的处理:小学思维,多加了需减去2倍。需注意,此时至少有两位罗马数字,可能存在ArrayIndexOutOfBounds的异常。对于六种特殊情况先判断后一位,再判断前一位