
【思路】
通常情况下罗马数字是 “大——>小” 排列的,是加法操作。特例中罗马数字是“小大” 排列的,做减法。所以只需要将相邻两位罗马数字进行比较,如果是 “大小” 排列,则做加法,相反做减法。
【代码】
class Solution {
public int romanToInt(String s) {
// 创建HashTable
HashMap map = new HashMap();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int len = s.length();
int sum = 0;
for(int i = 0; i < len; i ++) {
int num = map.get(s.charAt(i));
// 比较字符串s的第i与i+1位数字
// i < len-1 为了防止抛OutOfBound异常
if(i < len-1 && num < map.get(s.charAt(i+1))) {
sum = sum - num;
} else {
sum = sum + num;
}
}
return sum;
}
}
【说明】
// 定义map集合对象,引用类型为HashMap map = new HashMap (); // 向集合中添加对象 map.put(); // 获取指定键映射的值 map.get(); // 返回指定索引处的字符 s.charAt(index);