思路
比如IXX,使用临时变量temp保存上一个已经遍历的罗马数字,比如:遍历时是从后往前遍历的:1> 刚开始时,temp = 0; 遍历当前遍历到第一个X,则temp == 0 < 10 == X ,则res = 10;temp = 10;2> 继续向前遍历,又遇到X,此时temp == 10 = 10 == X,则 res = res + 10;即res = 20; temp = 10;3> 继续向前遍历,遇到I,此时temp == 10 > 1 == I; 则 res = res - 1; 即res = 19; temp = 1;循环终止;
代码
public int romanToInt(String s) {
char[] cs = s.toCharArray();
Map<Character, Integer> hm = new HashMap<>();
hm.put('I', 1);
hm.put('V', 5);
hm.put('X', 10);
hm.put('L', 50);
hm.put('C', 100);
hm.put('D', 500);
hm.put('M', 1000);
int res = 0;
int temp = 0; //临时变量
int value = 0; //当前罗马值的大小
for (int i = cs.length - 1; i >= 0; i--) {
value = hm.get(cs[i]);
if (temp <= value) {
res += value;
temp = value;
} else {
res -= value;
temp = value;
}
}
return res;
}