问题描述
输入一个字符串表示的罗马数字,要求转换为阿拉伯数字表示。
分析
简单的字符串处理问题,依次将罗马数字转换为对应阿拉伯数字,如果第i+1位比第i位大,则表示value=value(i+1)-value(i).
代码
public int romanToInt(String s) {
if(s.length()<1)return -1;
HashMap<Character, Integer> romanMap = new HashMap<Character, Integer>();
int value, temp;
int result = 0;
romanMap.put('I', 1);
romanMap.put('V', 5);
romanMap.put('X', 10);
romanMap.put('L', 50);
romanMap.put('C', 100);
romanMap.put('D', 500);
romanMap.put('M', 1000);
for (int i = 0; i < s.length(); i++) {
value = romanMap.get(s.charAt(i));
if (i + 1 < s.length()) {
temp = romanMap.get(s.charAt(i+1));
if (temp > value) {
i++;
value = temp - value;
}
}
result += value;
}
return result;
}
每个罗马数字转换为阿拉伯数字时,用switch好像效率比HashMap效率高。