解题思路:
1 很明显,有两种字符形式:一个字母和两个字母,可以进行分别讨论。
2 对两种分别建字典,分别处理。
3 这种方法思路较清晰,但是较慢;较快的思路是对字符串连续读,如果右边字母表示的数字比左边的大,则在结果中减去此值,代码就不贴了。
代码:
class Solution {
final static String[] ROMAN = {"M", "D", "C", "L", "X", "V", "I"};
final static String[] ROMAN2 = {"CM", "CD", "XC", "XL", "IX", "IV"};
final static int[] NUMBER = {1000, 500, 100, 50, 10, 5, 1};
final static int[] NUMBER2 = {900, 400, 90, 40, 9, 4};
public int romanToInt(String s) {
int result = 0;
char[] input = s.toCharArray();
int length = s.length();
boolean flag = false;
for (int i = 0;i < length; i++){
flag = false;
String tmp = String.valueOf(input[i]);
if ((input[i] == 'C'|| input[i] == 'X' || input[i] == 'I') && i != length - 1){
String tmp2 = tmp + input[i+1];
for (int j = 0;j < ROMAN2.length;j++){
if (tmp2.equals(ROMAN2[j])){
result += NUMBER2[j];
i++;
flag = true;
break;
}
}
}
if (flag)
continue;
for (int k = 0;k < ROMAN.length;k++){
if (tmp.equals(ROMAN[k])){
result += NUMBER[k];
break;
}
}
}
return result;
}
}