题目:
思路:
第十二题的逆运算,方法同理。需要注意的是IV、IX、XL、XC、CD、CM这六种特殊的情况。正常情况下每个字符找到对应的数值累加,这六种特殊字符都是左边的数值比右边的数值小。
这里以IV举例,IV对应数字是1和5,1<5 ,组成的罗马字符左边比右边小。IV可以看作先减1再加5。循环每个字符,若当前字符比下个字符代表的数值小,就这么处理。
注意数组越界异常,最后一个字符一定是加法。因为 4 也是先减在加,加在后面
代码:
public static int romanToInt(String s) {Map<Character, Integer> map = new HashMap<>();map.put('M', 1000);map.put('D', 500);map.put('C', 100);map.put('L', 50);map.put('X', 10);map.put('V', 5);map.put('I', 1);int a = 0;for (int i = 0; i < s.length(); i++) {//比较当前字符 和 下一个字符 大小 例如:IV 1 < 5 要用减法//最后一个字符一定是加法,所以要加上 i < s.length() - 1if (i < s.length() - 1 && map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {a -= map.get(s.charAt(i));} else {a += map.get(s.charAt(i));}}return a;
}